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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.06.2010, 00:16
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию Delphi + SQL

Возможно глупий вопрос, но как сделать SQL запрос с одной таблици на другую? Тоисть у меня есть поле DBEdit где я ввожу значение. При нажатии на кнопку сопоставляется это значение с одним из полей другой таблицы! Если значение найдено - отображаются все значения этой таблицы. Если нет - выводим, соответственно, сообщение!

Как вообще внедрить SQL в Delphi?....
Ответить с цитированием
  #2  
Старый 09.06.2010, 00:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Кладем компонент типа TQuery (TADOQuery, TIBDataSet и т.д.).
2. В нем вводим запрос и подсоединяем к визуальным компонентам.
3. Выполняем запрос.
4. У компонента есть свойство RecordCount. Если оно = 0, то выводим сообщение и закрываем запрос.
Ответить с цитированием
  #3  
Старый 09.06.2010, 00:45
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Непонятно, что с чем и как сопоставить. Если ты вводишь значение вручную, то причем тут связь между таблицами? Давай как- то более подробно или пример приведи.

SQL внедряется, например, методом использования компонента TQuery.
Ответить с цитированием
  #4  
Старый 09.06.2010, 00:50
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

А как из программы с поля DBEdit1 передать значение запросу SQL, а потом отобразыть результат запрса в поле DBEdit2 ?
Ответить с цитированием
  #5  
Старый 09.06.2010, 00:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

через параметры.
в запросе пишешь что-то типа: WHERE FIELDNAME = :MyParam
В Дельфи заполняешь его как:
Код:
ADOQuery1.Parameters.ParamByName('MyParam').AsInteger := ...
Ответить с цитированием
  #6  
Старый 09.06.2010, 01:18
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Цитата:
Сообщение от lmikle
через параметры.
в запросе пишешь что-то типа: WHERE FIELDNAME = :MyParam
В Дельфи заполняешь его как:
Код:
ADOQuery1.Parameters.ParamByName('MyParam').AsInteger := ...
А если у меня индекс идет в качестве счетчика - то какой тип должен быть?... Ведь счетчик имеет тип LongInteger, а Integer - тип немного меньше первоначального!

Последний раз редактировалось vah-smile, 09.06.2010 в 01:32.
Ответить с цитированием
  #7  
Старый 09.06.2010, 03:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В Delphi тип Integer является адиасом именно к LongInt.
Ответить с цитированием
  #8  
Старый 09.06.2010, 15:57
Аватар для Mad programmer
Mad programmer Mad programmer вне форума
Прохожий
 
Регистрация: 11.05.2010
Сообщения: 23
Репутация: 10
По умолчанию

используй метод locate и не надо никаких параметров.
Ответить с цитированием
  #9  
Старый 10.06.2010, 00:23
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Что-то у меня не получается! Итак на форму разместил :
• Первая таблица (t_Pryymalnya - приемное отделение больницы): Table2, DataSource2
Table2:
- Active: True
- DatabaseName: Oblik_Paciyentiv
- TableName: t_Pryymalnya

DataSource2:
- DataSet: Table2
• Вторая таблица (t_Paciyent - пациенты): Table3, DataSource3, Query1
Table3:
- Active: True
- DatabaseName: Oblik_Paciyentiv
- TableName: t_Paciyent

DataSource3:
- DataSet: Query1

Query1:
- Active: True
- DatabaseName: Oblik_Paciyentiv
- DataSource: DataSource2
- SQL: Select * from t_Paciyent where ID_Paciyent= :ID_Paciyent
Поле ID_Paciyent - это как бы номер карточки!

На форме также есть кнопка (Button5), при нажатии на которую должен выполнятся запрос SQL (Query1). Для кнопки сделал следующее:

Query1.ParamByName('ID_Paciyent').AsInteger := StrToInt (DBEdit3.Text);
// DBEdit3 - поле, преднадлизащие к Table2
Итак, мы вводим значение в поле DBEdit3 При нажатие на кнопку в таблице Table3 мы должны получить значение из запроса. Если значение есть - выводим даные (DBEdit6..DBEdit11 = Table3); Если нет - то нет (можно будет вывести сообщение о том, что значение нет)!

Что не так! Помогите! Очень нужно!

PS: Готов даже заплатить за исходник (Учет больных в больнице) через систему WebMoney (или перевод на счет мобильного телефона)! Кто заинтересован пишите в личку или на ICQ (392956910)!

Последний раз редактировалось vah-smile, 10.06.2010 в 00:32.
Ответить с цитированием
  #10  
Старый 10.06.2010, 00:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Опиши логику - что должно происходить при нажатии на кнопку - человеческим языком. а то есть подозрение, что у тебя запрос не совсем правильный. Как связанны эти 2 таблицы? По каким полям? И что значит, что ты в DBEdit вводишь что-то???
Ответить с цитированием
  #11  
Старый 10.06.2010, 01:03
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

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 
Отображает все даные пользователя t_Paciyent.ID_Paciyent= 2 . Вот сейчам мучусь над тем, чтобы значение для переменной задавалось не статически, а дынамически!

О... и еще один вопрос по теме: Как сделать так, чтобы при открытии формы мы получили имитацию нажатия кнопки "+" на напели DBNavigator (Добавление новой учетной записи)? Ну и конечно обработчик, для сохнанения даных в таблицу!

Последний раз редактировалось vah-smile, 10.06.2010 в 01:20.
Ответить с цитированием
  #12  
Старый 10.06.2010, 08:24
Аватар для Mad programmer
Mad programmer Mad programmer вне форума
Прохожий
 
Регистрация: 11.05.2010
Сообщения: 23
Репутация: 10
По умолчанию

Запрос у тебя правильный, проверь тип параметра в 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  
Старый 11.06.2010, 00:07
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Все. Разобрался. Всем огромное СПАСИБО!

Вот для остальных напишу кратко. Для того, чтобы написать 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;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter