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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 12:18   #31
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а ты проверял:
а) правильно ли формируется текст запроса?
б) что там реально возвращает запрос?

я бы написал запроса подсчета кол-ва таких записей и если оно >0, то ругаться
а если вернуться к твоему варианту запроса, то проверять нужно не так
Код:
 if not qrTmp.Eof then
а так
Код:
 if not(qrTmp.BOF and qrTmp.EOF) then
soleil@mmc вне форума Ответить с цитированием
Старый 13.10.2010, 12:58   #32
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Попытаюсь не согласиться с soleil@mmc по конструкции проверки на пустой результат запроса. Наступал на эти грабли не раз.
Правда, это в какой-то мере зависит от сервера СУБД.
artemavd стоически скрывает какой он базой пользуется. Поэтому в полной мере сказать кто прав невозможно.
Еще один аргумент в "защиту" "короткой проверки пустого результата запроса.
Если вы получив результат запроса делаете в своей программе дальше цикл:
Код:
while not Query.Eof do begin
  ...
  Query.Next;
end;
Здесь вы тоже добавите проверку на BOF? Вряд ли. А если нет, то почему в if такое должно быть? Условия в while ничем не отличаются от условий if.

Может быть (гадать только приходится), у artemavd изменения не записываются в базу к моменту проверки. Но, повторяю, это только предположение.
Все запросы надо проверять. Как правило делаются проверки в инструментальных приложениях предназначенных для СУБД, с которой идет работа.
Karabash вне форума Ответить с цитированием
Старый 13.10.2010, 13:35   #33
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Не, не работает. Код:
Код:
procedure TForm1.BtnClick(Sender: TObject);
var
 qrTmp: TADOQuery;
begin
 qrTmp:=TADOQuery.Create(Self);
 try
  qrTmp.Connection:=Form1.ADOConnection1;
  qrTmp.SQL.Text:='select * from ' + Form1.Label61.Caption + ' where ([Number contract] is null)';
  qrTmp.Open;
  if not(qrTmp.Bof and qrTmp.Eof) then
     ShowMessage(' Есть ошибки! ');
  finally
   qrTmp.Close;
   qrTmp.Free;
  end
 end;
Изначально у меня специально в этом поле пустая ячейка, чтобы проверить код. Надимаю на кнопку - сообщение показывается. Ввожу значение, нажимаю на кнопку, сообщение снова показывается....
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2010, 14:05   #34
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Здесь виртуально вряд ли кто скажет что не так. Нужно поработать со всем материалом чтобы локализовать проблему.
Karabash вне форума Ответить с цитированием
Старый 13.10.2010, 14:54   #35
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Хорошо. Спросите конкретно. Использую ADO, таблица называется export. Что еще сказать?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2010, 14:59   #36
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Karabash Посмотреть сообщение
Попытаюсь не согласиться с soleil@mmc по конструкции проверки на пустой результат запроса. Наступал на эти грабли не раз.
Правда, это в какой-то мере зависит от сервера СУБД.

....

Если вы получив результат запроса делаете в своей программе дальше цикл:
Код:
while not Query.Eof do begin
  ...
  Query.Next;
end;
Здесь вы тоже добавите проверку на BOF? Вряд ли. А если нет, то почему в if такое должно быть? Условия в while ничем не отличаются от условий if.
не надо здесь никаких других домыслов и придумок на пустом месте
ТС проверяет наличие записей в датасете и все, никому в данном случае не нужно крутить весь датасет, если он что-то содержит

приведенное условие не (Начало и Конец) - это проверка на пустой датасет, такая проверка отрабатывает моментом в отличие от любимой всеми ламерами - датасет.RecordCount
ну и какбэ никого не заставляю - поделился своим опытом

Цитата:
Сообщение от artemavd Посмотреть сообщение
Изначально у меня специально в этом поле пустая ячейка, чтобы проверить код. Надимаю на кнопку - сообщение показывается. Ввожу значение, нажимаю на кнопку, сообщение снова показывается....
ну мало ли что ты там вводишь
может ты коммит забываешь делать или у тебя внутри роллбек случается или эксепшен гасится затычкой... да еще вагон причин

возьми просто выдерни этот запрос и сходи в свою базу через какой-нить чего_то_там_девелопер и выполни его там

Цитата:
Сообщение от artemavd Посмотреть сообщение
Хорошо. Спросите конкретно. Использую ADO, таблица называется export. Что еще сказать?)
АДО - не база, а способ доступа

Последний раз редактировалось artemavd; 13.10.2010 в 15:16.
soleil@mmc вне форума Ответить с цитированием
Старый 13.10.2010, 15:47   #37
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Такой запрос
Код:
select * from export where [Number contract] is null
возвращает 1 запись с пустым значением Number contract. Я сделал две пустые ячейки в этом поле, но они в БД как-то "объединились", хз, и получилась одна, которую я в БД не вижу, но вышеприведенным запросом она показывается эта запись.

Такой запрос
Код:
select * from export where [Number contract] is not null
возвращает вообще все записи: и в которых есть пустые ячейки в поле Number contract и в которых нет.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2010, 16:12   #38
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

да небось не объединялось ничего
а пустые могут быть только на взгляд, а реально в одной нулл, а в другой пробел
soleil@mmc вне форума Ответить с цитированием
Старый 13.10.2010, 16:27   #39
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А как сделать, чтобы пробел убирался во время запроса? Trim же не напишешь в запрос
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.10.2010, 16:39   #40
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
А как сделать, чтобы пробел убирался во время запроса? Trim же не напишешь в запрос
а вот здесь вернулись опять к вопросу - какая субд?
и не надо писать АДО
внекоторых субд можно и трим написать
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскраска диаграммы dayfuaim Microsoft Office Excel 8 22.08.2010 15:44
Раскраска эллипса rubik Мультимедиа в Delphi 1 02.05.2010 05:21
цветовая раскраска эллипса rubik Помощь студентам 1 01.05.2010 15:52
раскраска матрицы jeyjoe Помощь студентам 0 12.11.2009 18:49
Раскраска домика в графике Tirr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.10.2009 22:10