win98 и ExecSQL

Electro_Chaynik
Дата: 06.07.2009 14:33:32
вопрос в следующем : есть приложение, написанное на делфи с использованием ado компонент. (приложение разрабатывалось в xp)
в XP работает отлично, но в win 98 вот этот блок:

adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Text:=t2;//обновление
  ADOQuery1.ExecSQL ;

if ADOQuery1.ExecSQL = 0 then// вот тут почему то в 98-ой всегда =0 даже если обновляет???
begin
  with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:=t;//добавление
ExecSQL;
end;
  end;
и добавляет и обнавляет , т.е. в итоге имеем 2 записи (обнавленную и добавленную)(это и есть проблема)
например :
таб | отметка | дата
1 |О |01.06.2009 // обнавленная
1 |В |01.06.2009 //добавленная

мои мысли:ADOQuery1.ExecSQL работает на платформе win98 как то не так... или незнаю
база - MS Access, Провайдер- Provider=Microsoft.Jet.OLEDB.4.0;
PS: пробывала установить mcdac 2.8 не помогло.... все так же
Может у кого тоже было такое. помогите решить проблему. Отпуск горит!!!!!
Klick
Дата: 06.07.2009 14:38:54
if ADOQuery1.ExecSQL = 0 then

ржачно :)
Кроик Семён
Дата: 06.07.2009 14:40:01
кстати, а зачем 2 раза подряд ADOQuery1.ExecSQL вызывать?

adoQuery1.Close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Text:=t2;//обновление
  ADOQuery1.ExecSQL ;

if ADOQuery1.ExecSQL = 0 then// вот тут почему то в 98-ой всегда =0 даже если обновляет???
begin
  with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:=t;//добавление
ExecSQL;
end;
  end;
Klick
Дата: 06.07.2009 14:44:32
Кроик Семён
кстати, а зачем 2 раза подряд ADOQuery1.ExecSQL вызывать?


Про IsEmpty наверно лекцию пропустил
Anatoly Podgoretsky
Дата: 06.07.2009 14:46:23
Алгоритм некрасивый. Если ты хочешь узнать есть ли запись, то сделай SELECT запрос, а далее по результату.

По поводу работает ли adoQuery1 на 98 или нет, не имеет смысла задавать. Туту надо просто выкинуть adoQuery а использовать TAdoCommand или TAdoConnection (может даже правильнее, судя по синтаксису).

--
http://www.podgoretsky.com
Anatoly Podgoretsky
Дата: 06.07.2009 14:47:52
Klick
Про IsEmpty наверно лекцию пропустил

Пропустила и причем тут IsEmpty - запрос не возвращает набор данных.
Electro_Chaynik
Дата: 06.07.2009 14:50:30
ну как сказать , зачем... в XP все прокатывало... и еще вроде как проверяю если нашел данные для обновления то молодец , если нет то добавить .
А вообще пробывала и без 2-го вызова ExecSQL, все равно в 98-ой не так работает, т.е. делала:
1. селестом искала данные
2. если нашла - обновление
3. нет - добавление
в итоге (при пршаговом выполнении) получалось что даже при наличии данных ADOQuery1.recordCоunt всегда почему то = 0?!? и это при наличии 3 запичей в бд.
Klick
Дата: 06.07.2009 14:50:55
Anatoly Podgoretsky
Klick
Про IsEmpty наверно лекцию пропустил

Пропустила и причем тут IsEmpty - запрос не возвращает набор данных.


ААА... в понедельник и уже глаза в кучу.. Сории.. Проглядел что ExecSQL а не Open
Ну тогда код однозначно нужно подавать с соусом чили, иначе будет плёхо.
За ADOQuery1 (как и за Button1 и подобное) - дать бы пару раз по рукам.
Klick
Дата: 06.07.2009 14:51:56
Опять RecordCоunt :) Он наверно икает весь щас, бедняга :)
Anatoly Podgoretsky
Дата: 06.07.2009 14:55:44
Electro_Chaynik
в итоге (при пршаговом выполнении) получалось что даже при наличии данных ADOQuery1.recordCоunt всегда почему то = 0?!? и это при наличии 3 запичей в бд.

Справку про recordCоunt прочитай, что бы понять, что оно не применимо без риска.
Вот тут уже можно использовать IsEmpty или правильно сформировать запрос, применить Coun(*)