2011-08-31 5 views
2

데이터베이스 테이블 필드 이름을 검색하는 데 사용하는 Delphi 2005 코드가 있습니다.
32 비트 시스템에서는 문제없이 작동합니다 (Windows XP, Windows Vista, Windows 7).64 비트 컴퓨터에서 TSQLConnection.GetFieldNames가 작동하지 않습니다.

그러나 64 비트 시스템 (Windows Vista 또는 Windows 7)에서 실행할 때 필드 이름을 반환하지 않습니다.

코드는 다음과 같다 : 64 비트 시스템에

32 비트 시스템에서
uses Db, SQLExpr; 

procedure TForm1.ShowFieldNames(SQLConnection: TSQLConnection; 
           FieldNames: TStringList); 
    var FieldIndex: Integer; 
begin 
    SQLConnection.GetFieldNames('TABLENAME', FieldNames); 
    ListBox.Items.Add('Field Count = ' + IntToStr(FieldNames.Count)); 
    for FieldIndex:=0 to FieldNames.Count - 1 do 
    ListBox.Items.Add('FieldName = ' + FieldNames[FieldIndex]); 
    end; 

, 이것은 비 - 제로 계수를 나타내고, 필드 이름 목록이 표시 "필드 = 0 개수 "

Delphi 2006 또는 Delphi 2007로 다시 컴파일하면 문제가 해결됩니다.

델파이의 최신 버전으로 프로그램을 업그레이드 할 필요없이이 문제를 해결하려면

(I 파이어 버드 2.5을 사용하고 있습니다).

또한 왜 문제가 발생하는지 이해하고 싶습니다. 64 비트 Windows에서 프로그램이 다르게 작동하는 이유는 무엇입니까?

혹시 조언 좀 해주실 수 있습니까?

+1

D2005의 버그와 유사합니다. D2006과 D2007을 사용할 수 있다면 왜 업데이트하고 싶지 않은지 물어볼 필요가 있습니다. (나는 놀라지 않을 것입니다; D2005에는 많은 버그가있었습니다.) 2005-> 2007에서 주요 호환성 문제는 없습니다. –

+0

D2005의 버그 일 수는 있지만 64 비트 시스템에서만 발생하는 이유는 의아해합니다. 업그레이드하지 않는 주된 이유는 클라이언트가 D2006 및 D2007에 대한 라이센스를 갖고 있지 않으며 코드를 유지 관리하기를 원합니다. 타사 라이브러리에도 몇 가지 문제가 있다고 생각합니다. RDB $ RELATION_FIELDS에서 필드 이름을 가져 오려고합니다. – urtlet

+0

항상 같은 FireBird 서버에 연결합니까? 즉, 컴파일 된 exe (Delphi 2005 vs Delphi 2006 사용)와 클라이언트 OS (32bit Win vs 64bitWin)가 유일한 변경 사항입니까? – ain

답변

1

쿼리를 사용하여 : 결과를 트리밍

SELECT RDB$FIELD_NAME FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='TABLENAME'; 

반환하는 것은 나에게 필드 이름을 제공하고, 64 비트 시스템에서 작업을 수행합니다.

이것은 64 비트 시스템에서 실행될 때 프로그램이 다르게 작동하는 이유를 설명하지는 않지만 실용적인 솔루션을 제공합니다.