Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
ВнизDBLookUpComboboxEh с двумя ключевыми полями Найти похожие ветки
← →
Киря (2005-08-07 11:02) [0]У меня в базе 2 таблицы
Мне нужно что бы в списке значений DBLookUpComboboxEh были значения полей FIO обеих таблиц
делаю так
select tabNo, Fio,"0" from table1
union
select tabNo, Fio,"1" from table2
т.к. TabNo может совпадать то различаю таблицы по "0" и "1"
В свойствах DBLookUpComboboxEh.keyfield стоит "TabNo,Column1"
где column1 поле с "0" и "1"
Все работает
Далее мне нужно поменять значение KeyField в DBLookUpComboboxEh на tabNo:=edit1.text а column1:="1"
Как мне это сделать?
Помогите пожалуйста кто может
Заранее спасибо
← →
Киря (2005-08-09 05:20) [1]неужели ни у кого нет мыслей по данному вопросы.
Возможно что нибудь можно изменить/переделать?
← →
yk © (2005-08-09 10:50) [2]можешь объяснить идею?
зачем тебе нижен такой union?
← →
Sergey13 © (2005-08-09 10:57) [3]select tabNo||"-0" tn, Fio from table1
union
select tabNo||"-1" tn, Fio from table2
← →
yk © (2005-08-09 11:01) [4]Типа ты с помощью 1 и 0 фильтрацию хочешь организовать?
Т.е. если юзеру надо, то в комбобоксе будут данные помеченные 1, если не надо, то 0 ?
← →
Киря (2005-08-09 12:30) [5]Попытаюсь объяснить идею:
У меня две таблицы одна пациенты другая персонал
в обеих есть поля TabNo и Fio
причем tabNo в 1-ой таблице может равняться TabNo второй таблицы
Недавно мне пришлось делать кассу:
деньги могут удерживаться/выдаваться как пациенту так и доктору
Делаю такую выборку
select tabNo, Fio,"0" from table1
union
select tabNo, Fio,"1" from table2
пишу в DBLookUpComboboxEh.keyfield:=""TabNo,Column1"
получаю список всех пациентов+докторов
Далее следует такой код
if DBLookupComboboxEh10.ListSource.DataSet.FieldByName("Column1").Value="1" then pers:=true;
if DBLookupComboboxEh10.ListSource.DataSet.FieldByName("Column1").Value="0" then pers:=false;
datamodule1.ADOCommand2.CommandText:="insert into Kassa(TabNo,pers,DateOp,Summa,typ) values (:TabNo,:pers,:DateOp,:Summa,:typ)";
datamodule1.ADOCommand2.Parameters.ParamByName("typ").Value:=typ;
datamodule1.ADOCommand2.Parameters.ParamByName("TabNo").Value:=DBLookupComboboxEh10.KeyValue;
datamodule1.ADOCommand2.Parameters.ParamByName("Summa").Value:=StrToFloat(edit11.Text);
datamodule1.ADOCommand2.Parameters.ParamByName("DateOp").Value:=DateTimePicker10.Date;
datamodule1.ADOCommand2.Parameters.ParamByName("Pers").Value:=pers;
datamodule1.ADOCommand2.Execute;
И все замечательно работает
При добавлении новой операции нужно открывать кассу где в DBLookupComboboxEh10 будет прописана фамилия пациента
Как это организовать?
← →
Ega23 © (2005-08-09 12:59) [6]DBLookupComboboxEh10
datamodule1
ADOCommand2
...
А почему у тебя названия таблицы Kassa?
Должно быть Table15.
И столбцы должны называться Column1, Column2, ..., ColumnN
← →
ANB © (2005-08-09 17:18) [7]
> Киря (09.08.05 12:30) [5]
- простое решение -
> Sergey13 © (09.08.05 10:57) [3]
Как ты это потом разрулишь - твои проблемы.
Имхо. Я бы базу перестроил. Нехорошо делать ссылки на 2 разные таблицы с совпадением ID. Констрейнт на такую связку не написать. Есть 2 решения : либо 2 отдельных поля для связки, либо сделать одну таблицу получателей.
← →
yk © (2005-08-10 15:55) [8]> ANB ©
согласна,
а лучше вообще - таблицу людей, и в ней ссылка на их вид: доктор/пациент и проч.
Это если у каждого человека одна роль.
Иначе - таблицу связей между людьми и их видами.
Скорее всего назреет такая проблема. Имхо
← →
Киря (2005-08-11 06:43) [9]yk © (10.08.05 15:55) [8]
> ANB ©
согласна,
а лучше вообще - таблицу людей, и в ней ссылка на их вид: доктор/пациент и проч.
Это если у каждого человека одна роль.
Иначе - таблицу связей между людьми и их видами.
Скорее всего назреет такая проблема. Имхо
Конечно можно сделать и так. Но переделать базу и соответственно программу весьма геморойно т.к. программа уже практически готова (осталось только решить данную проблему и сделать пару отчетов)
Долго думал как решить эту проблему и у меня назрел такой вопрос:
А можно ли с помощью запроса получить такой же recordSet как я и получаю только добавить к нему ещё один столбец в котором будут значения от 1 до n(число записей)
Если можно то как?
Заранее спасибо
← →
sniknik © (2005-08-11 08:13) [10]> только добавить к нему ещё один столбец в котором будут значения от 1 до n(число записей)
SELECT IDENTITY (INT, 1, 1) AS Id, tabNo, Fio, Num INTO #Tmp FROM (
select tabNo, Fio,"0" AS Num from table1
union all
select tabNo, Fio,"1" from table2
)
SELECT * FROM #Tmp
DROP TABLE #Tmp
← →
Киря (2005-08-11 08:55) [11]При проверке данного запроса получил ошибку
Incorect syntax near the keyword "SELECT"
Причем ругается именно на последний SELECT ("SELECT * FROM #Tmp"
)
Не могу понять почему
И ещё конструкциюselect tabNo, Fio,"0" AS Num from table1
union all
select tabNo, Fio,"1" from table2
изменил наselect tabNo, Fio,"0" AS Num from table1
union all
select tabNo, Fio,"1" AS Num from table2
← →
ANB © (2005-08-11 09:22) [12]
> Киря (11.08.05 06:43) [9]
- судя по всему, констрейнты ты вообще не вешал. Потом будет геморрой. Уникальности ID тебе уже показали, как добиться. ([3]) А такое решение, какое ты хочешь сейчас сделать (новые ID) не даст тебе ничего. Чего ты с этими ID делать то будешь ? Их нет ни во врачах, ни в пациентах.
← →
Киря (2005-08-11 10:13) [13]А можно ли сделать так что бы в таблицах TabNo не совпадали?
База SQL Server 2000
Поле TabNo тип int identity
← →
sniknik © (2005-08-11 10:22) [14]> Причем ругается именно на последний SELECT ("SELECT * FROM #Tmp")
> Не могу понять почему
забавно, но...
SELECT IDENTITY (INT, 1, 1) AS Id, tabNo, Fio, Num INTO #Tmp FROM (
select tabNo, Fio,"0" AS Num from table1
union all
select tabNo, Fio,"1" from table2
) AS a
SELECT * FROM #Tmp
DROP TABLE #Tmp
причина. (сорри запрос прямо тут составлял, ошибся)
> И ещё конструкцию
...
> изменил на
...
без разници, в обьеденениях по union первый запрос определяющий. типы/имена оттуда берутся.
← →
sniknik © (2005-08-11 10:27) [15]> А можно ли сделать так что бы в таблицах TabNo не совпадали?
в смысле можно? ты же эту программу пишеш вот и сделай так чтобы не совпадали.
← →
ANB © (2005-08-11 10:40) [16]
> Киря (11.08.05 10:13) [13]
Попробуй поиграть с параметрами identity. Но, имхо, лучше внести все в одну таблицу "люди". Расширенные атрибуты для врачей и пациентов можно сложить еще в 2.
← →
Киря (2005-08-11 11:21) [17]> Киря (11.08.05 10:13) [13]
Попробуй поиграть с параметрами identity. Но, имхо, лучше внести все в одну таблицу "люди". Расширенные атрибуты для врачей и пациентов можно сложить еще в 2.
сделал что бы tabNo для пациентов был нечетным, а для персонала нечетным. И все.
А ведь как все было просто.
Спасибо всем тем кто пытался мне помочь и помог в решении данной проблемы
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.063 c