|
#1
|
||||
|
||||
Delphi + SQL
Возможно глупий вопрос, но как сделать SQL запрос с одной таблици на другую? Тоисть у меня есть поле DBEdit где я ввожу значение. При нажатии на кнопку сопоставляется это значение с одним из полей другой таблицы! Если значение найдено - отображаются все значения этой таблицы. Если нет - выводим, соответственно, сообщение!
Как вообще внедрить SQL в Delphi?.... |
#2
|
|||
|
|||
1. Кладем компонент типа TQuery (TADOQuery, TIBDataSet и т.д.).
2. В нем вводим запрос и подсоединяем к визуальным компонентам. 3. Выполняем запрос. 4. У компонента есть свойство RecordCount. Если оно = 0, то выводим сообщение и закрываем запрос. |
#3
|
||||
|
||||
Непонятно, что с чем и как сопоставить. Если ты вводишь значение вручную, то причем тут связь между таблицами? Давай как- то более подробно или пример приведи.
SQL внедряется, например, методом использования компонента TQuery. |
#4
|
||||
|
||||
А как из программы с поля DBEdit1 передать значение запросу SQL, а потом отобразыть результат запрса в поле DBEdit2 ?
|
#5
|
|||
|
|||
через параметры.
в запросе пишешь что-то типа: WHERE FIELDNAME = :MyParam В Дельфи заполняешь его как: Код:
ADOQuery1.Parameters.ParamByName('MyParam').AsInteger := ... |
#6
|
||||
|
||||
Цитата:
Последний раз редактировалось vah-smile, 09.06.2010 в 01:32. |
#7
|
|||
|
|||
В Delphi тип Integer является адиасом именно к LongInt.
|
#8
|
||||
|
||||
используй метод locate и не надо никаких параметров.
|
#9
|
||||
|
||||
Что-то у меня не получается! Итак на форму разместил :
• Первая таблица (t_Pryymalnya - приемное отделение больницы): Table2, DataSource2Поле ID_Paciyent - это как бы номер карточки!Table2:• Вторая таблица (t_Paciyent - пациенты): Table3, DataSource3, Query1 На форме также есть кнопка (Button5), при нажатии на которую должен выполнятся запрос SQL (Query1). Для кнопки сделал следующее: Итак, мы вводим значение в поле DBEdit3 При нажатие на кнопку в таблице Table3 мы должны получить значение из запроса. Если значение есть - выводим даные (DBEdit6..DBEdit11 = Table3); Если нет - то нет (можно будет вывести сообщение о том, что значение нет)! Что не так! Помогите! Очень нужно! PS: Готов даже заплатить за исходник (Учет больных в больнице) через систему WebMoney (или перевод на счет мобильного телефона)! Кто заинтересован пишите в личку или на ICQ (392956910)! Последний раз редактировалось vah-smile, 10.06.2010 в 00:32. |
#10
|
|||
|
|||
Опиши логику - что должно происходить при нажатии на кнопку - человеческим языком. а то есть подозрение, что у тебя запрос не совсем правильный. Как связанны эти 2 таблицы? По каким полям? И что значит, что ты в DBEdit вводишь что-то???
|
#11
|
||||
|
||||
DBEdit3 = поле ID_Paciyent из таблицы t_Pryymalnya (Приемная)
Есть также поля с DBEdit6 по DBEdit11 c таблицы t_Paciyent (Пациенты). Две таблицы имеют общее поле ID_Paciyent. У таблицы t_Paciyent это поле ключевое (СЧЕТЧИК)! Связь должна быть 1:1, но в Database Desktop я это не знаю как сделать! Поэтому решил создать связь с помощью SQL Все поля 2 таблиц отображены на 1 форме. Мы должны ввести значение в поле DBEdit3 При нажатии на кнопку - поля с DBEdit6 по DBEdit11 - должны вывести информацию о пациенте (если такой есть). Иначе просто вывести сообщение что такого пациента нет (SHOWMESSAGE)! Сейчас у меня в Query1 в поле SQL записано: Код:
Select * from t_Paciyent where ID_Paciyent= :ID_Paciyent Код:
Select * from t_Paciyent where ID_Paciyent= 2 О... и еще один вопрос по теме: Как сделать так, чтобы при открытии формы мы получили имитацию нажатия кнопки "+" на напели DBNavigator (Добавление новой учетной записи)? Ну и конечно обработчик, для сохнанения даных в таблицу! Последний раз редактировалось vah-smile, 10.06.2010 в 01:20. |
#12
|
||||
|
||||
Запрос у тебя правильный, проверь тип параметра в Query и что в него передается.
Query1.Close; Query1.ParamByName('ID_Paciyent').AsInteger := StrToInt (Edit3.Text); Query1.Open; if Query1.Recordcount=0 then begin Showmessage('Нет данных.....'); Query1.Close; end; ------------------- О... и еще один вопрос по теме: Как сделать так, чтобы при открытии формы мы получили имитацию нажатия кнопки "+" на напели DBNavigator (Добавление новой учетной записи)? Ну и конечно обработчик, для сохнанения даных в таблицу! ------------------- Если ты добаляешь данные непосредственно в Grid то при открытии формы сделай Table.Insert; Чтобы сделать свой обработчик кнопки DBNavigator необходимо в методе BeforeAction написать: case Button of nbInsert : begin ///// end; end; |
#13
|
||||
|
||||
Все. Разобрался. Всем огромное СПАСИБО!
Вот для остальных напишу кратко. Для того, чтобы написать SQL-запрос ставимь на форму инструмент Query из вкладки DBE. Выставляем для него свойстваи в коде пишем: Код:
Query1.Close; Query1.SQL.Clear; Query1.SQL.Text := 'Select * From t_Paciyent Where ID_Paciyent = :param'; Query1.Params.ParamByName('param').Value := StrToInt (DBEdit3.Text); Query1.Open; Query1.Active:=True; |