Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2009, 15:02   #1
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию win98 и ExecSQL

вопрос в следующем : есть приложение, написанное на делфи с использованием ado компонент. (приложение разрабатывалось в xp)
в XP работает отлично, но в win 98 вот этот блок:
Код:
 adoQuery1.Close;
 adoQuery1.SQL.Clear;
 adoQuery1.SQL.Text:=t2;//обновление
  ADOQuery1.ExecSQL ;

 if ADOQuery1.ExecSQL = 0 then 
 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 как то не так... или незнаю
база - аксесс
Tanuska___:) вне форума Ответить с цитированием
Старый 01.07.2009, 15:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как то не так
Возможно. Может быть провайдер тупит.
Поменяй стратегию. Скажем перед обновлением делай поиск нужного, если не найден то добавить иначе обновить...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 15:35   #3
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

Цитата:
Возможно. Может быть провайдер тупит.
Поменяй стратегию. Скажем перед обновлением делай поиск нужного, если не найден то добавить иначе обновить...
только что поменяла стратегию.... но все равно тупит... ADOQuery1.recordCaunt всегда почему то = 0... хотя уже по запросу должно было быть 3 записи
Tanuska___:) вне форума Ответить с цитированием
Старый 01.07.2009, 15:39   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

число записей чего?
операции инсерт/апдейт не возвращают набор данных

лучше переписать код кагтотаг
1) запрос кол-ва записей
Код:
select count(*) cnt from your_table where field_key0 = :p0 /* and  field_key1 = :p1 and ... */
в параметр(ы) подставите свои значения

2) а дальше
Код:
if qADO.FieldByName('cnt').AsInteger>0 then
// апдейтим запись

else
// добавляем запись

Последний раз редактировалось soleil@mmc; 01.07.2009 в 15:46.
soleil@mmc вне форума Ответить с цитированием
Старый 01.07.2009, 15:49   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Tanuska___
А как выглядят твои запросы и как часто нужно обновление делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 16:06   #6
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

Цитата:
А как выглядят твои запросы и как часто нужно обновление делать?
запросы:
t2:='update uch SET ocob='+QuotedStr(ComboBox3.Text)+' where (tab like '+QuotedStr(ComboBox1.Text)+') and (data_oc like '+QuotedStr(d)+' )';

t:='insert into uch (tab,ocob,data_oc) '+
' values ('+QuotedStr(ComboBox1.Text)+','+Qu otedStr(ComboBox3.Text)+','+QuotedS tr(d)+')';

t3:='select * from uch where (tab like '+QuotedStr(ComboBox1.Text)+') and (data_oc like '+QuotedStr(d)+' ) ';// этот на
Цитата:
стратегию
обновление ... даже не знаю как минимум 8 раз для редактируемого tab

нашла статью http://www.microsoft.com/downloads/d...DisplayLang=ru
но там надо Для Windows 98 требуется второе обновление Y2K и Internet Explorer 4.01 SP2. это что??? и может ли помочь?
Tanuska___:) вне форума Ответить с цитированием
Старый 01.07.2009, 16:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и может ли помочь?
Это сервиспаки... В целом я не очень верю в их помошь, но попробовать стоит...

Еще такой момент, а если поиск делать не через SQL а методом locate например?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 16:30   #8
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

вот только найти второе обновление Y2K немогу.... ссылки с сайта микрософт удалены... может они не поддерживают уже эту версию...
а locate не подойдет. там вся прога на SQL , и еще + отчеты строятся на выборке... так что надо как то через SQL думать .
Tanuska___:) вне форума Ответить с цитированием
Старый 01.07.2009, 16:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Tanuska___
ок. Тогда давай по шагам
Код:
t3:='select * from uch where (tab like '+QuotedStr(ComboBox1.Text)+') and (data_oc like '+QuotedStr(d)+' ) ';
Когда этот запрос возвращается ты как проверяешь его результат?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 16:46   #10
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

как обычно : if ADOQuery1.recordCaunt >0 then begin
Tanuska___:) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из Win98 не успеваю опросить железо. Поможет ли мне написание драйвера? Kovex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 13.04.2010 21:56
Два запроса - один ExecSQL EdNovice БД в Delphi 1 27.06.2007 17:33
ADOQuery & WIN98 v4.10 NovaC БД в Delphi 2 09.01.2007 13:27