2011-11-10 1 views
3

PowerBuilder 12 Classic DataWindow를 사용하여 ID 열이있는 SQL Server 2008 데이터베이스 테이블에 새 레코드를 삽입합니다. 삽입 후에 다른 테이블에서 사용할 ID 열의 값을 얻고 싶습니다. 내 pbodb120.ini에서PowerBuilder : SQL Server 테이블에 삽입 한 후 ID 값 가져 오기

나는이에 GetIndentity 라인을 변경 한 [MS_SQLSERVER_SYNTAX] 아래 :

내 코드 (DOCID은 ID 열)과 같습니다
GetIdentity='Select IDENT_CURRENT (''&TableName'')' 

:

dw_document_add.update(true, true) 

li_docid = dw_document_add.getitemnumber(dw_document_add.getrow(), "docid") 

문제는 정체감을 반으로 줄이는 것만 같다. 타이밍 문제 일 수 있다고 생각합니다. (레코드가 데이터베이스에 삽입됩니다.)

언제든지 신원을 확인할 수있는 방법이 있습니까?

UPDATE는

내 연결 문자열에 신원 = '@@ IDENTITY'를 추가했고 지금 작동하는 것 같군. 그러나 pbodbxxx.ini 파일에 있어야하는지 확실하지 않습니다.

답변

4

최고의 조언은 바퀴를 재발 명하지 않으려는 것입니다. 데이터 윈도우는 이미 이것을 수행합니다. DataWindow 페인터에서 Rows/Update Properties로 이동하고, 하단에는 Identity Column이 표시됩니다. ID 컬럼을 선택하십시오 (SQL.에이 L 있어야 함). PB는 INSERT 후에 ID 값을 검색합니다.

행운을 빕니다,

테리.

+0

나는 이미 그렇게 해왔다. 나는 ID 열을 docid로 설정했지만, 여전히 절반 정도의 시간 만 채 웁니다. 레코드는 항상 데이터베이스에 저장되지만 docid는 데이터 윈도우 열에 다시 저장되지 않습니다. – Slapout

+0

트리거를 실행하는 중 실패 할 경우가 발생하여 값을 검색하는 데 사용 된 변수가 삭제됩니다. 필자는 SQL Server 2008을 직접 사용해 본 적이 없으므로 환경 적으로 구체적인 것을 찾아 볼 가치가 있습니다. – Terry

+0

지금 다시 읽는 중 바보 같은 질문 : 네이티브 드라이버 대신 ODBC를 사용하는 특별한 이유가 있습니까? 네이티브 드라이버와 동일한 문제가 있습니까? ODBC 드라이버는 ID 값을 얻는 방법으로 사용할 수 있습니다. 나는 ODBC 드라이버를 더 악화 시켰습니다! – Terry

1

그리고 GetRow() 호출도 신뢰하지 않습니다.

에는 이미 삽입 한 dw 행에 대한 로컬 변수에 행 번호가 있어야합니다. 그렇지 않으면 확실히 Update() 호출보다 앞서 모든 SetItem() 호출에 대해 적절한 인수가 없었을 것입니다.

0

나는 SQL SNC 드라이버를 사용하여 연결 PB 11.5 MSSQL 2005

을 사용하고 있습니다. 나는 항상 내 연결 문자열에 identity=SCOPE_IDENTITY()을 추가한다.

@@identity을 사용하는 경우 응용 프로그램이 다중 사용자 인 경우 문제가 발생할 수 있습니다. 또한 가능한 경우 저장 프로 시저 데이터 윈도우 업데이트를 사용하는 것이 좋습니다. 내 식별 열을 OUTPUT 매개 변수로 표시합니다. 저장 프로 시저에서 INSERT 절 뒤에 SELECT @id_column = SCOPE_IDENTITY()을 호출합니다. 그리고 나는 그것으로 결코 곤란을 겪지 않았다.