2013-03-15 56 views
0

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

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

但是,通过dbExpress控件在Delpih或使用SQLiteExpert返回的数据是垃圾。我有一个怀疑是使用64位Windows,但我完全难住。

SQLiteExpert screenshot

任何想法乡亲?

命令行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; 

感谢。

+0

看起来像一个错误的编码。你怎么写数据? – 2013-03-15 12:30:31

+0

通过Delphi dbExpress组件或通过命令行sqlite3.exe – 2013-03-15 13:10:55

+0

请显示代码和示例记录。 – 2013-03-15 13:37:39

回答

0

好吧,没有回答这样的问题,但我有一个解决方法和一个更好的想法,问题的出在哪里,如果有人对我有一些想法!

我把一个赢得XP的盒子扔掉,发现完全一样的问题,所以它不是一个64位的问题。太好了!

所以,我删除了PARAMS从插入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位系统上。所以这是与params有关,但不是什么线索!

+0

上看到。终于固定 - 参数需要是ftWidestring,而不是ftString ... – 2013-03-18 17:13:54