DateTimePicker & Interbase
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
DateTimePicker & Interbase
Здравствуйте.
Есть компонент DateTimePicker. А есть-ли подобный компонент для работы с Interbase.
Может есть другой способ ввода даты из стандартого DateTimePicker в Interbase?
Подскажите, есть-ли способ ввода даннных минуя компоненты DataControl-s. Приведите пожалуйста пример.
Спасибо.
Есть компонент DateTimePicker. А есть-ли подобный компонент для работы с Interbase.
Может есть другой способ ввода даты из стандартого DateTimePicker в Interbase?
Подскажите, есть-ли способ ввода даннных минуя компоненты DataControl-s. Приведите пожалуйста пример.
Спасибо.
пример :
Код: Выделить всё
mydataset.parambyname('mydate').asdate := DateTimePicker.date
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
http://www.ibase.ru/ibfaq.htm#dtproblemНичего не понимаю.
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
Таблица создавалась в IBExpert имена полей набирал в верхнем регистре
поэтому и использовал " ".
Тем более, что при других вариатах ' ' или без них Билдер ругается.
Код: Выделить всё
...
DT_INPUT date
DT_OUTPUT date
NO_PL integer
...
Тем более, что при других вариатах ' ' или без них Билдер ругается.
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
Попробовал сделать по другому, но ничего не получается. Делаю следующим образом. (BDS 2006 - C++)
Как быть. А как можно сделать компонент который наследовал свойства DBComboBox но с "пристегнутым" календарем. 
Код: Выделить всё
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString FurmNum, Date_Input, Date_Output, Prich_Vivoda, Notes, ALL;
FurmNum = ComboBox1->Text;
Date_Input = DateToStr(DateInput->Date);
Date_Output = DateToStr(DateOutput->Date);
Prich_Vivoda = Memo1->Text;
Notes = Memo2->Text;
ALL = "insert into STOYKOST_FURM(DT_OUTPUT, NOTES, PRICH_ZAMENI) values (\""+Date_Output+
"\",\""+Prich_Vivoda+"\",\""+Notes+"\");";
IBScript1->Script->Clear();
IBScript1->Script->Text = ALL;
IBScript1->ExecuteScript();
}

-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
к тому же, выполнять ОДИН запрос через IBScript - это изврат. Похоже, www.ibase.ru/devinfo/ibx.htm ты не читал.
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
Я то понимаю что я хочу - чтобы добавлять и редактировать записи в базе данных посредством компонетов не отосящихся к группе DataControls, а использовать ComboBox, Memo, и особенно DateTimePicker, так как нет подобого компонента для работы с базой 
Поэтому я вижу только один выход считывать данные из компонентов программно и добавлять данные в таблицу через запрос.
Поправьте меня если я не правильно мыслью.
В IBDataSet1 я ничего не пихаю, там автоматически все сгенерировалось, а именно:
Питаюсь добавить новую запись таким образом:
но выдает исключение:
По поводу использования IBScript вместо IBQuery, это временно, пока я не пойму что и как. Короче говоря - это пока не так важно.

Поэтому я вижу только один выход считывать данные из компонентов программно и добавлять данные в таблицу через запрос.
Поправьте меня если я не правильно мыслью.
В IBDataSet1 я ничего не пихаю, там автоматически все сгенерировалось, а именно:
Код: Выделить всё
delete from STOYKOST_FURM
where
DT_INPUT = :OLD_DT_INPUT and
NO_FURMI = :OLD_NO_FURMI
insert into STOYKOST_FURM
(DT_OUTPUT, NOTES, PRICH_ZAMENI)
values
(:DT_OUTPUT, :NOTES, :PRICH_ZAMENI)
update STOYKOST_FURM
set
DT_OUTPUT = :DT_OUTPUT,
NOTES = :NOTES,
PRICH_ZAMENI = :PRICH_ZAMENI
where
DT_INPUT = :OLD_DT_INPUT and
NO_FURMI = :OLD_NO_FURMI
Select
DT_INPUT,
DT_OUTPUT,
NO_FURMI,
NOTES,
PRICH_ZAMENI,
STOYKOST
from STOYKOST_FURM
where
DT_INPUT = :DT_INPUT and
NO_FURMI = :NO_FURMI
Код: Выделить всё
IBScript1->Script->Clear();
IBScript1->Script->Text = "insert into STOYKOST_FURM(DT_OUTPUT, NOTES, PRICH_ZAMENI) values (\""+ DateToStr(DateTimePicker2->Date) +"\",\""+ Memo1->Text +"\",\""+ Memo2->Text +"\");";
IBScript1->ExecuteScript();
Код: Выделить всё
Dinamic SQL Error
с кодом -206
Неизвестный столбец и пишет текст который был в компоненте (например Дату в DateTimePicker1->Date или Текст в Memo1->Text)
работай через параметры. и читай ibx.htm еще раз.
DateToStr преобразует дату в строку в формате, заданном в приложении или полученном от системы. Который (формат) не всегда совпадает с тем, который хочет получить сервер в виде строки. Поэтому лучше использовать параметры, для которых такое преобразование не нужно.
и опять. одиночные запросы НЕ НАДО выполнять в IBScript. Надо в IBQuery или IBSQL. IBScript предназначен для СКРИПТОВ, т.е. МНОЖЕСТВА SQL-команд, выполняемых одним "блоком" (все равно поштучно).
см. ibx.htm
DateToStr преобразует дату в строку в формате, заданном в приложении или полученном от системы. Который (формат) не всегда совпадает с тем, который хочет получить сервер в виде строки. Поэтому лучше использовать параметры, для которых такое преобразование не нужно.
и опять. одиночные запросы НЕ НАДО выполнять в IBScript. Надо в IBQuery или IBSQL. IBScript предназначен для СКРИПТОВ, т.е. МНОЖЕСТВА SQL-команд, выполняемых одним "блоком" (все равно поштучно).
см. ibx.htm
компонент для работы с датой есть в RXlib.Дмитрий Б. писал(а):Я то понимаю что я хочу - чтобы добавлять и редактировать записи в базе данных посредством компонетов не отосящихся к группе DataControls, а использовать ComboBox, Memo, и особенно DateTimePicker, так как нет подобого компонента для работы с базой![]()
а если хочешь работать с базой ручками, то kdv тебя уже отправил, читай про IBQuery и параметры. пример я тебе дал еще во втором сообщении и ты его игнорируешь.
если у тебя есть датасет нафиг тебе еще и скрипт ?
будет что-то вроде
IBDataset->insert;
IBDataset->parambyname('DT_OUTPUT').asdate := lalala ;
IBDataset->parambyname('NOTES').asstring := lalala ;
IBDataset->parambyname('lalal').aslalalal := lalala ;
IBDataset->post;
transaction->commit;
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
Спасибо за ответы. Я все-таки сделал через через SQL
Код: Выделить всё
FormMain->IBQuery1->SQL->Add("INSERT INTO STOYKOST(NO_FURM, DT_INPUT, DT_OUTPUT, STOYKOST, PRICH_ZAMENI, NOTES)");
FormMain->IBQuery1->SQL->Add("VALUES('"+CBNoFurm->Text+"', '"+
DT_Input->Date.DateString()+"', '"+
DT_Output->Date.DateString()+"', '"+
Stoykost+"', '"+
MemPrich->Text+"', '"+
MemNotes->Text+"');");
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
Я думаю, что задать как "/" не получится, т.к. использую компонент DateTimePicker, который этого зделать не дастkdv писал(а): и сделал без параметров. Что будет, если например ты укажешь на клиентской машине разделитель дат как "/" ?

Тут возникла другая проблема, которую решить у меня не получается:
Есть поле типа ДАТА, допускаются пустые значения. Например при добавлении новой записи это поле может быть не заполнено. При этом поле остается со значением НУЛЛ.
Допустим в это поле внесли дату, а затем ее надо убрать (зделать пустым).
Я пробовал присваивать НУЛЛ или пустую строку (""), но это вызывает ошибку.
Подскажи пожалуйста, как это можно осуществить?
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Дмитрий Б. писал(а):Тут возникла другая проблема, которую решить у меня не получается:
Есть поле типа ДАТА, допускаются пустые значения. Например при добавлении новой записи это поле может быть не заполнено. При этом поле остается со значением НУЛЛ.
Допустим в это поле внесли дату, а затем ее надо убрать (зделать пустым).
Я пробовал присваивать НУЛЛ или пустую строку (""), но это вызывает ошибку.
Подскажи пожалуйста, как это можно осуществить?
Код: Выделить всё
DatasetDataField.Clear;
-
- Сообщения: 56
- Зарегистрирован: 05 дек 2007, 18:09
[/quote]
как именно пробовал?[/quote]
Пробовал двумя способами.
1) DATE TmpDateOut
2) AnsiString TmpDateOut
но оба провалились
в первом случает - ошибка что-то невозможное с (0).
во втором тоже самое, но только с ("")
А по поводу
не уверен, т.к. мне необходимо сделать пустой не все поля записи а только DT_OUTPUT (Дата), при чем этом желательно выполнить через SQL в общем запросе (см выше).
Как быть?
как именно пробовал?[/quote]
Пробовал двумя способами.
1) DATE TmpDateOut
2) AnsiString TmpDateOut
но оба провалились
в первом случает - ошибка что-то невозможное с (0).
во втором тоже самое, но только с ("")
Код: Выделить всё
if(ChBDtOut->Checked == true)
{
1) TmpDateOut = DT_Output->Date;
2) TmpDateOut = DT_Output->Date.DateString();
}
else
{
1) TmpDateOut = NULL;
2) TmpDateOut = "";
}
IBQuery1->Active = false;
IBQuery1->SQL->Clear();
tmp2 = "update stoykost set
DT_OUTPUT='" + TmpDateOut + "', STOYKOST=" + Stoykost + ", PRICH_ZAMENI='" + MemPrich->Text + "', NOTES='" + MemNotes->Text + "' where NO_FURM='" + tmpNo_Furm + "' and DT_INPUT='" + tmpData_Input +"'";
IBQuery1->SQL->Add(tmp2);
IBQuery1->Active = true;
}
Код: Выделить всё
DatasetDataField.Clear;
Как быть?