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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.03.2011, 08:59
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию Добавить значение из другой таблицы

Добрый день!
Перехожу с BDE на SQL и очень трудно в него вникаю...
Подскажите пожалуйста, как можно написать в ячейку данные с другой таблицы. Т.е например есть таблица с базой посетителей. И есть отдельно талица городов. Нужно в таблицу с базой посетителей вставить ID Города из базы Городов.
Вот начало кода:

Код:
QPacient.SQL.Clear;
QPacient.SQL.Add('INSERT INTO Pacient (FamPacient,NamePacient,OtchPac,DateR,IIN,Country,Oblast,City,Street,Dom,Kv,Dtel,Mtel) VALUES(:FamPacient, :NamePacient, :OtchPac, :DateR, :IIN, :Country, :Oblast, :City, :Street, :Dom, :Kv, :DTel, :MTel');
QPacient.Parameters.ParamByName('FamPacient').Value:=Fam.Text;
QPacient.Parameters.ParamByName('NamePacient').Value:=Name.Text;
QPacient.Parameters.ParamByName('OtchPac').Value:=Otch.Text;
QPacient.Parameters.ParamByName('IIN').Value:=Name.Text;
QPacient.Parameters.ParamByName('Country').Value:=.....?
Ответить с цитированием
  #2  
Старый 22.03.2011, 09:37
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Зависит от того что вы используете в качестве выбора города пользователем?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 22.03.2011, 09:40
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Компонент ComboBox
Вообще то еще не использую, но хочу использовать именно его.
Ответить с цитированием
  #4  
Старый 22.03.2011, 09:57
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

я делал проще, (знаю что не красиво но проще). кидаешь еще один combobox делаешь его не видимым. в него грузишь ID (когда заполняешь комбобокс с городами) в onchange 1 го комбобокса пишешь:
Код:
ComboboxID.itemIndex:=ComboboxCityStr.ItemIndex;

ну а в запросе уже подставляешь значение
Код:
QPacient.Parameters.ParamByName('Country').Value:=StrToInt(ComboboxID.Text)
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #5  
Старый 22.03.2011, 10:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В общем все правильно вы делаете, не забудьте добавить в конце:
Код:
QPacient.ExecSQL;
Есть только одно замечание, у вас несколько неудачная схема БД т.к. вы собрали в одну таблицу 3 разных сущнности. Скажем телефон или адрес может быть один и тот-же у пациентов-родственников.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 22.03.2011, 10:09
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Raider
я делал проще, (знаю что не красиво но проще). кидаешь еще один combobox делаешь его не видимым. в него грузишь ID (когда заполняешь комбобокс с городами) в onchange 1 го комбобокса пишешь:
Код:
ComboboxID.itemIndex:=ComboboxCityStr.ItemIndex;

ну а в запросе уже подставляешь значение
Код:
QPacient.Parameters.ParamByName('Country').Value:=StrToInt(ComboboxID.Text)
Получается, что если много разных данных (например Область, Город, Улица), то под каждый из них делать ComboBox? На сколько это влияет на системные ресурсы? Ибо прога будет запускаться на гораздо менее производителеной машине, нежели на которой пишется...
Ответить с цитированием
  #7  
Старый 22.03.2011, 10:11
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Есть только одно замечание, у вас несколько неудачная схема БД т.к. вы собрали в одну таблицу 3 разных сущнности. Скажем телефон или адрес может быть один и тот-же у пациентов-родственников.
Не вижу в этом ничего плохого, ибо у каждого пациента свой ID, а эти данные - контактная информация и информация для формирования отчетов. И она в принципе может поворятся...

И еще, как правильно на SQL-е считать данные в ComboBox?
Ответить с цитированием
  #8  
Старый 22.03.2011, 10:17
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Либо вариант более правильный написать хранимую процедуру для записи куда передается все те же переменные и город а в хранимой процедуре уже дергать ID из справочников.

по поводу увеличения какого либо существенного замедления быть не должно разве что только при загрузке программы.
как вариант если хочешь оформи данную форму в DLL и соответственно она будет загружаться и выгружаться когда нужна-ненужна.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #9  
Старый 22.03.2011, 10:38
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

А как на SQL-е правильно считать данные в ComboBox?
Ответить с цитированием
  #10  
Старый 22.03.2011, 10:42
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Всмысле? вопрос не понял.

ты как комбобокс с городами заполняешь?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #11  
Старый 22.03.2011, 10:47
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Вот жду, что бы добрые люди подсказали, как это правильно на SQL-е сделать...
Ответить с цитированием
  #12  
Старый 22.03.2011, 10:54
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

кидаешь кверик (ADOQuery1 например) в нем запрос :
Код:
Select CityID,CityStr
from SprCity
order by CityStr

далее на onShow формы пишешь
Код:
ADOQuery1.active:=true;
comboboxCityID.clear;
comboboxCityStr.clear;
if not ADOQUERY1.isEmpty then begin
  ADOQUERY1.First;
  repeat
    comboboxCityID.items.add(Adoquery1.fieldbyname('CityID').asString;
    comboboxCityStr.items.add(Adoquery1.fieldbyname('CityStr').asString;
    ADOQUERY1.next;
  until ADOQUERY1.eof;
comboboxCityID.itemindex:=0;
comboboxCityStr.itemindex:=0;
Adoquery1.active:=false;
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #13  
Старый 22.03.2011, 10:58
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Сильно не пинайте ногами...
Если на форму есьт уже ADOQuery. Нужно ли кидать еще один? Или все можно через один и тот же Query делать?
Ответить с цитированием
  #14  
Старый 22.03.2011, 11:05
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

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

вообщем можно и нужно.
например для цели заполнения комбобоксов можешь хоть динамически создать.
либо просто кинь на форму кверик например ТемпКвери и в нем меняй запросы которые не влияют в данный момент на отображении и логику приложения.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #15  
Старый 22.03.2011, 11:14
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Если можно - еще вопрос ADOConnection - один должен быть или можно несколько?
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter