Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-1115726525
X-Disa
2005-05-10 16:02
2005.09.25
Перехватить audio-out поток


1-1125436052
SergProger
2005-08-31 01:07
2005.09.25
Перетаскивание формы


2-1124094578
Max4
2005-08-15 12:29
2005.09.25
msado15.dll


14-1125480165
Layner
2005-08-31 13:22
2005.09.25
Знатокам IE (6), печать из IE широкой таблицы


1-1125497772
Карелин Артем
2005-08-31 18:16
2005.09.25
Константа - массив записей. Как делать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский