Работа с IBX
Работа с IBX
Привет всем!
При переходе на компоненты IBX возникла проблема с редактированием записи.
пробовал так
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('UPDATE USERACCT SET IS_ACTIVE = ' + Trim (Edit1.Text) + ',LASTDATE = ' + DateTimeToStr(Now));
IBSQL1.SQL.Add('WHERE USERNBR = 1');
IBSQL1.ExecQuery;
генерирует sql error - не нравится формат даты
раньше все было просто
ExecQuery.Edit;
ExecQuery.FieldByName('IS_ACTIVE').AsInteger := 1;
ExecQuery.FieldByName('LAST_DATE').AsDateTime:=Now;
ExecQuery.Post;
при работе с IBDataSet сразу возник вопрос - как передать параметр
в WHERE.
раньше -
ExecQuery.Sql.Add('SELECT * FROM USERACCT');
ExecQuery.Sql.Add('WHERE USERNBR = '+IntToStr(CurrentUserNbr));
где CurrentUserNbr - глобальная переменная.
тееперь пытаюсь так -
IBDataSet1.Database := IBDatabase1;
IBDataSet1.Transaction := IBTransaction1;
IBDataSet1.SelectSQL.Strings['SELECT * FROM USERACCT WERE USERNBR = '+ Trim(Edit1.Text)];
IBDataSet1.Active := True;
выдает incompatible types string & integer
p.s статью "Работа с IBX или использование InterBase eXpress в приложениях" читал - статья прекрасная, но где живые примеры!!!
один кусок кода заменяет иногда целую книгу!
При переходе на компоненты IBX возникла проблема с редактированием записи.
пробовал так
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('UPDATE USERACCT SET IS_ACTIVE = ' + Trim (Edit1.Text) + ',LASTDATE = ' + DateTimeToStr(Now));
IBSQL1.SQL.Add('WHERE USERNBR = 1');
IBSQL1.ExecQuery;
генерирует sql error - не нравится формат даты
раньше все было просто
ExecQuery.Edit;
ExecQuery.FieldByName('IS_ACTIVE').AsInteger := 1;
ExecQuery.FieldByName('LAST_DATE').AsDateTime:=Now;
ExecQuery.Post;
при работе с IBDataSet сразу возник вопрос - как передать параметр
в WHERE.
раньше -
ExecQuery.Sql.Add('SELECT * FROM USERACCT');
ExecQuery.Sql.Add('WHERE USERNBR = '+IntToStr(CurrentUserNbr));
где CurrentUserNbr - глобальная переменная.
тееперь пытаюсь так -
IBDataSet1.Database := IBDatabase1;
IBDataSet1.Transaction := IBTransaction1;
IBDataSet1.SelectSQL.Strings['SELECT * FROM USERACCT WERE USERNBR = '+ Trim(Edit1.Text)];
IBDataSet1.Active := True;
выдает incompatible types string & integer
p.s статью "Работа с IBX или использование InterBase eXpress в приложениях" читал - статья прекрасная, но где живые примеры!!!
один кусок кода заменяет иногда целую книгу!
Re: Работа с IBX
Не, ну можно и так писать, но там тебе кавычек доковырять надоjenya7 писал(а): IBSQL1.SQL.Add('UPDATE USERACCT SET IS_ACTIVE = ' + Trim (Edit1.Text) + ',LASTDATE = ' + DateTimeToStr(Now));
Послушай лучше kdv:
IBSQL1.SQL.Add('UPDATE USERACCT SET IS_ACTIVE = :IS_ACTIVE, LASTDATE = :LASTDATE');
IBSQL1.SQL.Add('WHERE USERNBR = :USERNBR');
...
IBSQL1.ParamByName('IS_ACTIVE').AsString := Trim (Edit1.Text);
IBSQL1.ParamByName('LASTDATE').AsDateTime := Now;
IBSQL1.ParamByName('USERNBR').AsInteger := 1;
jenya7 писал(а): p.s статью "Работа с IBX или использование InterBase eXpress в приложениях" читал - статья прекрасная, но где живые примеры!!!
один кусок кода заменяет иногда целую книгу!

-
- Сообщения: 5
- Зарегистрирован: 09 фев 2005, 15:57
Объясните секреты работы с IBX. Есть набор инструкций (упрощаю):
IBDataSet1.Close;
IBDataSet1.SelectSQL.Clear;
IBDataSet1.SelectSQL.Add('SELECT P_DATE, P_NUMBER from Protocols');
IBDataSet1.SelectSQL.Add('WHERE P_DATE = :Mask_edit');
IBDataSet1.SelectSQL.Add('ORDER BY P_DATE');
IBDataSet1.Prepare;
IBDataSet1.ParamByName('Mask_edit').AsString := MaskEdit1.Text;
IBDataSet1.Open;
Запустив это из IBExpert убедился, что запрос отрабатывает не вопрос, а вот из выполняя это из Delphi грид не обновляется, пустой после нажатия на кнопку. Где я не прав?
И ещё. При попытке вставки новой записи в таблицу (опять же условно - 3 поля: ID, Field_1, Field_2) через FieldByName компилятор требует ввода значения для ID, т.е. чтобы все три поля были заполнены. Логично, но если для этого поля стоит генератор и создан триггер "before insert" автоматически формирующий значение ID на сервере, то как быть?
IBDataSet1.Close;
IBDataSet1.SelectSQL.Clear;
IBDataSet1.SelectSQL.Add('SELECT P_DATE, P_NUMBER from Protocols');
IBDataSet1.SelectSQL.Add('WHERE P_DATE = :Mask_edit');
IBDataSet1.SelectSQL.Add('ORDER BY P_DATE');
IBDataSet1.Prepare;
IBDataSet1.ParamByName('Mask_edit').AsString := MaskEdit1.Text;
IBDataSet1.Open;
Запустив это из IBExpert убедился, что запрос отрабатывает не вопрос, а вот из выполняя это из Delphi грид не обновляется, пустой после нажатия на кнопку. Где я не прав?
И ещё. При попытке вставки новой записи в таблицу (опять же условно - 3 поля: ID, Field_1, Field_2) через FieldByName компилятор требует ввода значения для ID, т.е. чтобы все три поля были заполнены. Логично, но если для этого поля стоит генератор и создан триггер "before insert" автоматически формирующий значение ID на сервере, то как быть?
не подключил грид к датасету.пустой после нажатия на кнопку. Где я не прав?
прочитать www.ibase.ru/devinfo/generator.htmавтоматически формирующий значение ID на сервере, то как быть?
-
- Сообщения: 5
- Зарегистрирован: 09 фев 2005, 15:57
так. посмотри на свой запрос. ты дату вводишь в виде текста. Сервер воспринимает в виде текста только жесткий формат даты.
Следовательно, если уж ты делаешь параметр, то присваивай его не как строку, а как
asDate или asDateTime. И преобразуй СТРОКУ в ДАТУ на клиентской стороне (DateTimeToStr и т.п.).
меня удивляет такое отношение к написанию кода. Ты БЕЗ параметра проверял? С числовым параметром проверял? Нет? О чем тогда разговор про "не работает"?
Следовательно, если уж ты делаешь параметр, то присваивай его не как строку, а как
asDate или asDateTime. И преобразуй СТРОКУ в ДАТУ на клиентской стороне (DateTimeToStr и т.п.).
меня удивляет такое отношение к написанию кода. Ты БЕЗ параметра проверял? С числовым параметром проверял? Нет? О чем тогда разговор про "не работает"?