2013-03-15 5 views
0

Я разрабатываю приложение Delphi XE3. на Windows 7 64 бит. Он записывает базу данных SQLite3 и считывает данные.Данные SQLite3 «коррупция»

Если я прочитал данные с помощью dos cmdline, все в порядке.

Однако данные, возвращаемые с помощью элемента управления dbExpress в Delpih OR, с использованием SQLiteExpert - это мусор. У меня есть подозрение, что это связано с использованием 64-битной Windows, но я полностью в тупике.

SQLiteExpert screenshot

Любые идеи люди?

Commandline 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

Похож на неправильную кодировку. Как вы пишете данные? –

+0

Компонент Via Delphi dbExpress или через командную строку sqlite3.exe –

+0

Просьба показать код и пример записи. –

ответ

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-битной системе. Так что это как-то связано с параметрами, но не подсказка, что!

+0

И наконец, исправлено - параметры должны быть ftWidestring, а не ftString ... –

Смежные вопросы