2012-02-12 7 views
2

최근에 MySql이 시작되었으므로 초보자 실수를 저지르고있을 수 있습니다. 어떤 도움을 주셔서 감사합니다.쿼리가 델파이에서 varchar 데이터 유형의 열을 선택하면 MySQL 쿼리가 열림

데이터베이스를 Delphi에서 연결하고 데이터 유형 integer, decimal 및 varchar의 열로 쿼리를 정의하십시오.

문제는 델파이에서 쿼리를 선택하고 쿼리를 연 후 디버깅 할 때 varchar 열이 선택되지 않은 것처럼 나타나지 않는 경우입니다.

SELECT anumber, adecimalnumber, avarchar FROM atable 

샘플 델파이 코드 (메모리에서 이렇게, 이렇게 작은 실수를 신경 쓰지) :

ODBC 커넥터의 드라이버는 최신 MySQL의 커넥터 - ODBC를-5.1.10

+3

mysql 쿼리 및 테이블 스키마 표시 –

+0

ADO 또는 BDE를 사용하고 있습니까? –

+0

@ dzibul, 검색 코드를 보여주십시오. – whosrdaddy

답변

3

구체화 : dbTables -> BDE -> ODBC -> MySQL 데이터 액세스 경로를 사용하고있는 것으로 보입니다. BDE는 알 수없는 데이터 형식의 필드를 건너 뜁니다. 아마도 유니 코드 문자 유형은 BDE에서 지원되지 않습니다.

가능한 솔루션 :

  • 시도는 ODBC 연결 매개 변수의 연결을위한 ANSI 문자 집합을 설정;
  • dbGo/ADO 데이터 액세스 구성 요소를 사용합니다.
  • MySQL dbExpress 드라이버와 함께 dbExpress 구성 요소를 사용하십시오.
  • 은 3D 파티 데이터 액세스 구성 요소를 사용합니다. 디자인 모드에서 TQuery에 대한 지속 필드를 정의한 경우
3

샘플 쿼리입니다 .

procedure Test; 
var 
    AQuery: TADOQuery; 
    ANumber: integer; 
    ADecimal: Real; 
    AString: string; 
begin 
    AQuery:= TAdoQuery.Create; 
    try 
    AQuery.Connection:= SomeODBCConnection; 
    AQuery.SQL.Text:= 'SELECT anumber, adecimalnumber, avarchar FROM atable'; 
    AQuery.Open; 
    ANumber:= AQuery.FieldByName('anumber').AsInteger; 
    ADecimal:= AQuery.FieldByName('anumber').AsFloat; 
    AString:= AQuery.FieldByName('anumber').AsString; << Gets the varchar. 
    //Use AQuery.Next + test for AQuery.EOF to walk through rows. 
    finally 
    AQuery.Free; 
    end; 
end; 

실제로 varchar 데이터를 얻는 것이 어렵지 않습니다.

+0

내가 똑같은 방법을 사용하면 합리적인 답변을 드릴 수 있습니다. 문제는 varchar 형식의 필드에 액세스하려고하면 예외가 발생한다는 것입니다. fieldbyname 대신 Fields [i]로 시도했지만 varchar 유형 인 필드는 존재하지 않습니다. 나는 운전자가 문제일지도 모른다라고 생각한다. 그러나 나는 최신을 사용하고있다 :( – dzibul

4

는, 어쩌면 당신은 VARCHAR (TStringField) 필드 또는 FieldName 철자를 추가하는 것을 잊었다. 또한 신청서가 nvarchar (TWideStringField)이 아닌 varchar이어야합니다.

또 다른 해결책은 TQuery에서 모든 영구 필드를 제거하는 것입니다.