0

我正在开发一个 Delphi XE3 应用程序。在 Windows 7 64 位上。它写入 SQLite3 数据库并读回数据。

如果我使用 dos cmdline 读取数据,那很好。

但是,通过 Delpih 中的 dbExpress 控件或使用 SQLiteExpert 返回的数据是垃圾。我怀疑它归结为使用 64 位 Windows,但我完全被难住了。

SQLiteExpert 截图

有什么想法吗?

命令行 sqlite3 显示敏感数据:

sqlite> select distinct * from flight;
1|38926|Wed, 13 Mar 2013 15:54:19 GMT|EE35|38927|EGBB|EGPD|ofp|100720
2|38926|Wed, 13 Mar 2013 15:54:19 GMT|EE35|38927|EGBB|EGPD|ofp|100720

Delphi 代码(也尝试过同样问题的 TSQLQuery):

qrySelect := TSQLDataSet.Create(nil);
qrySelect.CommandType := ctQuery;
qrySelect.SQLConnection := conn;
qrySelect.CommandText := 'select distinct flight_brief_id, brief_id, brief_date from flight';

qrySelect.Open;
try
showmessage(inttostr(qryselect.Fields.Count)); // returns 3 as expected
qrySelect.First;
while not qrySelect.Eof do
begin
    strA := qryselect.Fields[0].AsString; 
    strB := qryselect.Fields[1].AsString;
    strC := qryselect.Fields[2].AsString;
    qrySelect.Next;
end;
finally
  qrySelect.Close;
end;

谢谢。

4

1 回答 1

0

好的,没有这样回答,但我有一个解决方法,并且可以更好地了解问题所在,以防有人对我有一些想法!

我清理了一个 win XP 盒子,发现完全相同的问题,所以这不是 64 位问题。好的!

所以,我从插入 TSQLQuery 中删除了参数

example of usage : qryInsert.Params.CreateParam(ftString, 'BriefID', ptInput);

并替换为

qryInsert.SQL.Text := 'insert into flight (brief_id, brief_date, flightno, '+
                    ' flight_brief_id, pod, poa, ofp, flight_date) '+
                    ' values ( '''+
                      brief_id+''', '''+
                      brief_date+''', '''+
                      flightno+''', '''+
                      flight_brief_id+''', '''+
                      pod+''', '''+
                      poa+''', ''ofp'', '''+
                      flight_date+''' )';

不漂亮,但它的工作。并且在 64 位系统上。所以这与参数有关,但不知道是什么!

于 2013-03-18T15:03:40.203 回答