![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FOX,ADO и отрицательные числа [D6, dBase, FoxPro]
Алексей © (2004-09-01 19:48:00)Второй раз задаю этот вопрос:
TADOQuery тащит отрицательные числа неверно. Пример:
select b.id_n,a.id_d,a.kol,a.pr from telo_n a,schapka_n b
where a.id_n=b.id_n
and
b.data_p=:data_p
and
b.cl=.t.
and b.mesto=:mesto
and a.kol<0
в гриде показывает записи, НО kol ПОЛОЖИТЕЛЬНЫЕ!!!
вариант
while not dm1.qGetNakl.Eof do begin
Memo1.Lines.Add(dm1.qGetNakl.FieldByName('id_d').AsString+' | '+
IntToStr(dm1.qGetNakl.FieldByName('kol').AsInteger));
dm1.qGetNakl.Next;
end;
тоже в MEMO дает положительные числа.
Пробовал брать количество как AsFloat - таже беда.
В вычислениях (может при отображении минус теряется?) таже ботва.
В прошлый раз справился использую кучу проверок в коде, но ведь это не выход.
Может кто-то из вас с подобной х...й сталкивался???
Таблицы FOX (мое проклятие!!!) и dBase (уж лучше бы все были в FOXе -и я бы на FOXе тогда написал). Использую следующую строку подключения:
'DSN=Таблицы Visual FoxPro;UID=;PWD=;SourceDB='+
Put_k_BD+';SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;'+
'Collate=Machine;Null=Yes;Deleted=Yes;';
sniknik (2004-09-03 10:31:00) [1]> не сработало из-за того, что таблица сделана в более позднем ФОКСе
ну так там же можно любую строку настроить! интересно именно это с той же строкой подключения как у тебя но в моей программе. (глюк в программе или нет понять, если с той же строкой но в моей проге этого не будет...)
Алексей (2004-09-03 09:31:00) [2]Пробовал. Как ты иговорил - не сработало из-за того, что таблица сделана в более позднем ФОКСе
sniknik (2004-09-02 16:44:00) [3]через строку? ну так еше в первом своем посте говорил так поступить. (читал бы внимательнее давно бы уже радовался.. ;о)
в моей то то проге пробовал? как там?
Алексей (2004-09-02 16:28:00) [4]УРА!!!
Победа!!!
Но через АГРОММНУЮ ЖООООООООПУ :-(
Пришдось сделать так:
select isnd, AllTrim(str(kol)) from nakl_d
where kol<0
Через ж..у, но работает.....
sniknik (2004-09-02 12:26:00) [5]> Какая строка подключения должна быть для работы с фоксом черех джет 4?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DB;Extended Properties=dBase IV;Persist Security Info=False
но это для старого фокса (пока они еще не отличались сильно), новый сразу увидиш таблицы будут или просто не видны или не открыватся (ошибку давать будет).
> В реестре не нашел ссылок на фокс :-(
их с 3.5 нет, в нем еще было разделение, после убрали.
Алексей (2004-09-02 12:20:00) [6]Тады поставлю вопрос так:
Какая строка подключения должна быть для работы с фоксом черех джет 4?
В реестре не нашел ссылок на фокс :-(
(software\mikrosoft\jet\ ....)
sniknik (2004-09-02 12:10:00) [7]> Так таблица-то FOX`ова :-(
ну так что? думаеш у меня драйвера под нее нету? ;о)))
Алексей (2004-09-02 11:50:00) [8]Так таблица-то FOX`ова :-(
sniknik (2004-09-02 11:34:00) [9]послал. будет та же фигня, пришли табличку возможно дело в ней.
Алексей (2004-09-02 11:23:00) [10]Давай. str_al_al@rambler.ru
sniknik (2004-09-02 11:14:00) [11]> А в программе ни в какую....
ну значит чегото в программе...
(могу прислать свою на ADO для проверки (500кб), если и в ней тоже самое то... ты не виноват ;о), виновата дельфя и тд.)
Алексей (2004-09-02 11:12:00) [12]Самое интересное, что SQL Explorer минусы прекрасно показывает, при настройке алиаса черех ODBC.
Ну BDE тоже работает.
А в программе ни в какую....
sniknik (2004-09-02 11:09:00) [13]> поле описанно как numeric(6,0)
тогда проблема не в этом (специально проверил токо что, нормально видит)
Алексей (2004-09-02 11:03:00) [14]В том то и дело, что поле описанно как numeric(6,0), да и значения от -1000 (ну очеь редко) до 1000. Основной диапазон значений от 0 до 30. А отрицательные от -30 до 0.
Может порыться в исходниках? Но для этого я не настолько владею дельфями :-(
sniknik (2004-09-02 10:56:00) [15]> Может кто-то из вас с подобной х...й сталкивался???
для больших чисел (bigint в MSSQL) есть подобный "глючок" в реализации толи ADO толи дейфийской обертки (конкретно не разбирался), оно их в строке (char(19)) держит...(в рекордсете/либо при передаче в делфи) а если числа отрицательные то минус на максимуме теряется ;( (20 символов получается).
возможно у тебя похожая проблема тип поля большое число, или интерпретируется так. выход был, делал свое приведение к строке в запросе (естественно len 20 :).
Алексей (2004-09-01 20:05:00) [16]Попробовал с BDE - заработало так как надо, но нет желания мешать в одной программе разные методы доступа к БД, тем более ставить клиентам BDE.