Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2010, 16:08
Litron Litron вне форума
Прохожий
 
Регистрация: 31.03.2010
Сообщения: 9
Репутация: 10
По умолчанию Помогите начинающему!!!

Помогите преодолеть.
Для связи с БД использую ADO. Таблицу отобразил, а вот запрос не могу сделать, пишет "несоответствие типов". В ADOQuery1 в параметре SQL прописаны 2 строчки:
0) SELECT * FROM Ustroystwa WHERE
1) [ID]='''+KopyIDUstr+'''
При выборе из Grida некоего пункта копирую ID в KopyIDUstr и пытаюсь заменить вторую строчку с уже готовыми данными, однако не хочет делать запрос.
Да, KopyIDUstr: Integer, а в запросе, как я понял, используется строковый тип (String). Может в этом проблема? Если да, то как подкорректировать, что добавить?
Код:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  ADOQuery1.Close;  
  ADOQuery1.SQL[1]:='[ID]='''+KopyIDUstr+'''';
  ADOQuery1.Open; 
  DataSource1.DataSet:=ADOQuery1; 
end;
Admin: Пользуемся тегами!

Последний раз редактировалось Admin, 31.03.2010 в 16:13.
Ответить с цитированием
  #2  
Старый 31.03.2010, 17:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Использовать параметры.
В запросе пишешь так:
Код:
SELECT * FROM Ustroystwa 
WHERE ID = :ID
В коде используешь так:
Код:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  ADOQuery1.Close;  
  ADOQuery1.ParamByName['ID'].AsInteger := KopyIDUstr;
  ADOQuery1.Open; 
  DataSource1.DataSet:=ADOQuery1; 
end;

PS. Не помню точно где там в ADO параметры сидят. Возможно надо обращаться к ним через ADOQuery1.Params.ParamByName['ID'].AsInteger.
Ответить с цитированием
  #3  
Старый 31.03.2010, 19:48
Litron Litron вне форума
Прохожий
 
Регистрация: 31.03.2010
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Код:
SELECT * FROM Ustroystwa 
WHERE ID = :ID
В коде используешь так:
Код:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  ADOQuery1.Close;  
  ADOQuery1.ParamByName['ID'].AsInteger := KopyIDUstr;
  ADOQuery1.Open; 
  DataSource1.DataSet:=ADOQuery1; 
end;
Вы были почти правы, задается через Parameters,
Код:
ADOQuery1.Parameters.ParamByName['ID'].AsInteger:=KopyIDUstr;
однако выкидывает теперь следующую ошибку:
Код:
[Ошибка] Unit2.pas(62): Not enough actual parameters
Ответить с цитированием
  #4  
Старый 31.03.2010, 19:59
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Код:
ADOQuery1.Parameters.ParamByName('ID').Value:=KopyIDUstr;
Ответить с цитированием
  #5  
Старый 01.04.2010, 14:38
Litron Litron вне форума
Прохожий
 
Регистрация: 31.03.2010
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от TOJluK
Код:
ADOQuery1.Parameters.ParamByName('ID').Value:=KopyIDUstr;

Спасибо, больше не ругается))))

А кто-нибудь может пояснить что означают точки перед ID в запросе SQL?:
Код:
ID=:ID
И другой вопрос:
У меня две формы. В Unit1 я прописал переменную Kip: integer. При выполнении значение этой же переменной мне нужно и в Unit2, однако она становится равной 0. При пошаговом просмотре видно, что она обнуляется в момент выполнения команд написанных в событиях OnShow второй формы.
Что и где нужно прописать, чтобы значение переменной сохранялось и во второй форме?
Ответить с цитированием
  #6  
Старый 01.04.2010, 14:48
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

точки перед ID- это параметр, который можно передать в запрос во время выполнения кода. Например если бы было:
Код:
SELECT * FROM Ustroystwa 
WHERE USER_NAME = :NAME
тогда в коде уже было бы так:
Код:
ADOQuery1.Parameters.ParamByName('NAME').Value:='''Иван''';
Параметры часто используются в связке Master-detail. Как- то так.
Про переменную- ну так уберите из событий OnShow второй формы тот момент в котором переменная обнуляется.
ЗЫ Надеюсь, эта переменная все- таки глобальная...
Ответить с цитированием
  #7  
Старый 02.04.2010, 20:06
Litron Litron вне форума
Прохожий
 
Регистрация: 31.03.2010
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо, понятно объяснил.
Просто не знал как объявить глобальную переменную (В Visual Basic было все проще).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter