Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > AdoQuery Поиск Не получается SQL запрос


Автор: AJIeKcEu 5.9.2011, 14:40
   Добрый день! уважаемые программисты.
Возникла маленькая проблемка с поиском через SQL
Использую  запрос типа: SELECT * FROM таблицаБД WHERE ИмяТаблицы='значение'

Код

p числовой
 load, zapros текстовый
____
   load:='622';
   zapros:='SELECT * FROM 555 WHERE ИмяТаблицы='''+load+'''';
   Query.SQL.Text:=zapros;
   Query.ExecSQL;
 p:=DataModule1.UserQuery.ExecSQL; // просто смотрю результат запроса 1-да, 0 нет (при записи, изменении работает, а на селекте нет)
showmessage(inttostr(p));


Выводит аргумент 0 :(
Пожалуйста подскажите в чем моя ошибка?


Добавил:
Задача: При добавлении новой строчки..проверять есть ли в таблице или нет (1:0)

Автор: AndreyIQ 5.9.2011, 15:27
Цитата(AJIeKcEu @ 5.9.2011,  14:40)
Добрый день! уважаемые программисты.
Возникла маленькая проблемка с поиском через SQL
Использую  запрос типа: SELECT * FROM таблицаБД WHERE ИмяТаблицы='значение'

Код

p числовой
 load, zapros текстовый
____
   load:='622';
   zapros:='SELECT * FROM 555 WHERE ИмяТаблицы='''+load+'''';
   Query.SQL.Text:=zapros;
   Query.ExecSQL;
 p:=DataModule1.UserQuery.ExecSQL; // просто смотрю результат запроса 1-да, 0 нет (при записи, изменении работает, а на селекте нет)
showmessage(inttostr(p));


Выводит аргумент 0 :(
Пожалуйста подскажите в чем моя ошибка?


Добавил:
Задача: При добавлении новой строчки..проверять есть ли в таблице или нет (1:0)

С адо не очень дружу, но обычно для получения результатов запроса необходимо выполнить не ExecSQL, а Open

Автор: Данкинг 5.9.2011, 15:53
Согласен с AndreyIQ: в данном случае требуется .open.

Добавлено через 37 секунд
Цитата(AJIeKcEu @  5.9.2011,  15:40 Найти цитируемый пост)
Задача: При добавлении новой строчки..проверять есть ли в таблице или нет (1:0)

Чего проверять?

Автор: 14SatanA88 5.9.2011, 16:10
Цитата(AJIeKcEu @  5.9.2011,  14:40 Найти цитируемый пост)
zapros:='SELECT * FROM 555 WHERE ИмяТаблицы='''+load+'''';


я бы посоветовал использовать параметры вообще.

Автор: superVad 5.9.2011, 16:13
AJIeKcEu, не очень понял, что тебе надо. Но если надо знать вернул ли запрос какие то значения, то юзай IsEmpty или RecordCount.

Автор: AJIeKcEu 6.9.2011, 07:45
ВСем спасибо, получилось 

Код

   load:=edit3.Text;
   zapros:='SELECT * FROM 555 WHERE таблица='''+load+'''';
   UserQuery.SQL.Text:=zapros;
  UserQuery.Open;
   p:=variant(DataModule1.UserQuery.RecordCount);
     showmessage(zapros+'- '+inttostr(p));
UserQuery.Close;


В зависимости от совпадения выводит 0/1..
С IsEmpty  не вышло.

Автор: Данкинг 6.9.2011, 10:19
Цитата(AJIeKcEu @  6.9.2011,  08:45 Найти цитируемый пост)
В зависимости от совпадения выводит 0/1..

Вообще-то там выведется не 0/1, а сколько строк отобрано по условию.
И "variant"-то зачем?

Автор: superVad 6.9.2011, 15:31
AJIeKcEu, IsEmpty возвращает булево значение. Если в наборе данных есть хоть одна запись то False, если записей 0, то True.
Да и с variant ты что то накрутил.

Добавлено через 41 секунду
Может имеет смысл подучить инглиш? smile

Автор: AJIeKcEu 12.9.2011, 11:56
По варианту так чтоб не паритьсяsmile
По инглишу согласен))) немецкий в школе учил и зря))
по 0/1, я там в конце ... поставил, что типа 1 и далее)

Автор: Данкинг 12.9.2011, 13:20
 smile 
Цитата(AJIeKcEu @  12.9.2011,  12:56 Найти цитируемый пост)
немецкий в школе учил и зря))

Ну, это ни о чём не говорит. В школе мы много чего нужного/ненужного учили/не учили. Я вот в школе учил английский, что не мешает мне в данное время знать испанский. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)