Миshук |
Отправлено: 09.10.2005, 18:10 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 36
|
СУБД — SQL Serever 2000
На форме три компанента JvEdit и один JvDateEdit. JvEdit для ФИО,а JvDateEdit для даты рождения. При нажатии кнопки берутся значения из этих компанентов и формируется текст запроса для набора данных.
С ФИО все понятно, а вот как мне дату в запрос вставить. Вот код:
CODE |
void __fastcall TFQueryPacient::JvBitBtn1Click(TObject *Sender)
{
AnsiString Str;
Str="select * from MedicalInspection where ";
if(JvEdit2->Text!="")Str=Str+"LastName LIKE' "+JvEdit2->Text+"%'and ";
if(JvEdit3->Text!="")Str=Str+"Name LIKE' "+JvEdit3->Text+"%'and ";
if(JvEdit4->Text!="")Str=Str+"FatherName LIKE' "+JvEdit4->Text+"%'and ";
**** if(JvDateEdit1->Text!=" . . ")Str=Str+"DayOfBirth=' "+JvDateEdit1->Date+" 'and ";
.................
....................
....................и т.д.
} |
Вся проблема в том как мне значение даты в строчку запроса засунуть?
То что выделено **** — это чуш какая-то!!! В самой СУБД поиск по дате осуществляется вообще в формате гггг.мм.дд а не в дд.мм.гггг как в JvDateEdit. Думал использовать функции SQL Server, а там функции работают с частями даты — или 'гггг' или 'дд' или 'мм'. Может что-нибудь подскажите? Как всетаки мне дату в запрос вложить? Заранее спасибо!
Отредактировано olegenty — 10/10/2005, 06:43
|
|
olegenty |
Отправлено: 10.10.2005, 05:43 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
пользуйся параметрическими запросами. в поиск...
|
|
gvg |
Отправлено: 10.10.2005, 12:33 |
|
Машинист паровоза
Группа: Участник
Сообщений: 222
|
QUOTE (Миshук @ 09/10/2005, 18:10) | **** if(JvDateEdit1->Text!=" . . ")Str=Str+"DayOfBirth=' "+JvDateEdit1->Date+" 'and "; |
Я использую так
CODE |
Str=Str+"DayOfBirth=' "+JvDateEdit1->Date->FormatString("yyyymmdd")+" 'and ";
| |
|
olegenty |
Отправлено: 10.10.2005, 12:41 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
если можно НЕ ИСПОЛЬЗОВАТЬ динамическоге формирование строки запроса, то его НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ. в данном случае нужно воспользоваться параметрическим запросом с четырьмя параметрами.
|
|
Миshук |
Отправлено: 10.10.2005, 14:15 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 36
|
[QUOTE] если можно НЕ ИСПОЛЬЗОВАТЬ динамическоге формирование строки запроса, то его НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ. в данном случае нужно воспользоваться параметрическим запросом с четырьмя параметрами.
Приходится использовать динамическое формирование строки т.к. использую один набор данных для:
1) Вставки записей в таблицу
2) Запроса записей из этой таблицы
Подумал над параметирческим запросом и родилось вот что!
Что если использовть в комбинации и динамическое формирование строки и параметрический запрос? Может это тупо?
(Работает нормально) Вот код -
[CODE]
void __fastcall TFQueryPacient::JvBitBtn1Click(TObject *Sender)
{
AnsiString Str;
Str="select * from MedicalInspection where ";
................................................
................................................
if(JvDateEdit1->Text!=" . . "){DM->qMI->Parameters->CreateParameter("PDayOfBirth",ftDateTime,pdInput,-1,NULL);Str=Str+"DayOfBirth=:PDayOfBirth and ";}
......................
.....................
DM->qMI->Close();
DM->qMI->SQL->Clear();
DM->qMI->SQL->Add(Str);
DM->qMI->Parameters->ParamByName("PDayOfBirth")->Value=JvDateEdit1->Date;
DM->qMI->Open();
....................
....................и т.д.
}
Так можно, или это глупо??? Важно знать ваше мнение!!!!
Отредактировано Миshук — 10/10/2005, 14:22
|
|
olegenty |
Отправлено: 10.10.2005, 14:38 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
блин. ну так я тоже один наследник TDataSet использую для выборок/вставки/обновления/удаления. ну и что? в данном конкретном случае можно обойтись одним параметрическим SELECT с четырьмя параметрами. в крайнем случае — оформить его в хранимую процедуру, где в зависимости от комбинации параметров будет выполняться та или иная инструкция. весь фокус в том, что при динамическом формировании запроса на клиенте, запрос будет КАЖДЫЙ РАЗ подготавливаться сервером (Prepare). В то время как при использовании параметрического запроса подготовка запроса сервером будет выполняться всего разик. первый (на самом деле это ещё зависит от СУБД, кривизны рук проектировщика БД и т.д., но в общем правильном случае — первый). опять же, это только кажется, что подготовка запроса занимает мало времени (а зависит от СУБД, инструкции, нагруженности сервера БД...).
|
|