Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 18:03   #11
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Сделал как Вы сказали, только теперь уже появилась новая ошибка: "Stream read error". При чем тут поток?


----------
При этом в БД добавляется пустая строка, во всех полях пишется null. А сам IBExpert показывает такую большую ошибку:
"Arithmetic overflow or division by zero has ocurred. arithmetic exception, numeric overflow, or string truncation"

---------upd

Сейчас пробую применить такой вариант кода вставки:
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.SQLs.InsertSQL.Add('INSERT INTO KONTAKTY(ID,FAM,IMY,OTCHE,POL,DATAROGD,ADRESS,DNOMER,MNOMER,FOTO)');
 Form1.pFIBDataSet1.SQLs.InsertSQL.Add('VALUES(null,'+Form1.RzLabel19.Caption+','+Form1.RzLabel20.Caption+','+Form1.RzLabel21.Caption+','+Form1.RzLabel33.Caption+','+Form1.RzLabel22.Caption+','+Trim(Form1.RzRichEdit1.Text)+','+Form1.RzLabel23.Caption+','+Form1.RzLabel26.Caption+','+Form1.RzLabel43.Caption+'');
 Form1.pFIBDataSet1.Insert;
 Form1.pFIBDataSet1.Post;
 Form1.pFIBDataSet1.Close;
 Form1.pFIBDataSet1.Open;
end;
На этот раз выдается такая большая ошибка:
"Form1.pFIBDataSet1.InsertQuery :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 13.
,.
"
Я так понимаю, что что-то с запятой в запросе, но где именно косяк понять не могу. Уже глаза смозолил выискивать эту ошибку
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 28.02.2010 в 20:00. Причина: Изменил код
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 21:31   #12
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Строковые значения в запросе должны обрамляться кавычками. Можно применить функцию QuotedStr:
QuotedStr(Form1.RzLabel9.Caption)
Karabash вне форума Ответить с цитированием
Старый 01.03.2010, 12:21   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Да я использовал это функцию, но проблема то Так и не решилась. Запрос не работает, ошибка выдается и еще я не могу отредактировать запись в бд через обычный dbedit, настроенный на какое либо поле. :-(
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.03.2010, 13:08   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Запрос не работает
В таких случаях, дружище, Desperados'ы вроде меня делают следующее:
1) перед тем как открыть запрос вставляют команду:
Код:
 Form1.pFIBDataSet1.SQLs.InsertSQL.SaveToFile(file.sql)
2) Если запрос падает на ошибку, открывают в неком SQL Explorer'e (зависит от СУБД - У меня например это Query Analizer for MS SQL) и в нем пускают запрос из file.sql
3) Анализируют что этот Analizer покажет, обычно в нем проще SQL отлаживать.

Рекомендую и тебе ту же стратегию отладки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.03.2010, 13:17   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Сделал вставку через pFIBQuery

Вот сделал пока так:
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBQuery1.SQL.Clear;
 Form1.pFIBQuery1.SQL.Text:='INSERT INTO KONTAKTY(ID,FAM,IMY,OTCHE,POL,DATAROGD,ADRESS,DNOMER,MNOMER,FOTO) VALUES(null,:F,:I,:O,:P,:D,:A,:DN,:M,:FO)';
 Form1.pFIBQuery1.ParamByName('F').Value:=Form1.RzLabel19.Caption;
 Form1.pFIBQuery1.ParamByName('I').Value:=Form1.RzLabel20.Caption;
 Form1.pFIBQuery1.ParamByName('O').Value:=Form1.RzLabel21.Caption;
 Form1.pFIBQuery1.ParamByName('P').Value:=Form1.RzLabel33.Caption;
 Form1.pFIBQuery1.ParamByName('D').Value:=Form1.RzLabel22.Caption;
 Form1.pFIBQuery1.ParamByName('A').Value:=Trim(Form1.RzRichEdit1.Text);
 Form1.pFIBQuery1.ParamByName('DN').Value:=Form1.RzLabel23.Caption;
 Form1.pFIBQuery1.ParamByName('M').Value:=Form1.RzLabel26.Caption;
 Form1.pFIBQuery1.ParamByName('FO').Value:='Фото';
 Form1.pFIBQuery1.ExecQuery;
end;
Так и было изначально. Вставка работает. Теперь такой вопрос: как мне настройить DataSource1, чтобы я мог получить содержимое БД в DBGrid-ax и DBEdit-ax? Просто так DataSource1 на pFIBQuery не настроишь как это делалось в BDE. Как осуществить это?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 01.03.2010 в 14:51. Причина: Вернул старый код
artemavd вне форума Ответить с цитированием
Старый 01.03.2010, 14:55   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Просто так DataSource1 на pFIBQuery не настроишь
т.е. DataSource тупо не видит этого компонента?
Ну в таком случае первое чтобы я сделал - отказался от DBGrid'а в пользу обычного грида, и программно его наполнял...
(Впрочим я как раз это и сделал во всех своих программах)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.03.2010, 15:05   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
т.е. DataSource тупо не видит этого компонента?
Ага, именно. Не видит.
Цитата:
Ну в таком случае первое чтобы я сделал - отказался от DBGrid'а в пользу обычного грида, и программно его наполнял...
Не хотелось бы этого делать, т.к. для моей программки нужен навороченный именно DBGrid . А может, в навороченном сделать также как и в обычном наполение?
Примерно так, да?
Код:
Form1.DBGridEh1.DataSource.DataSet.FieldByName('FAM').AsString:=???
Что писать вместо "???" ? На какой компонент настройть? Для каждой колонки кидать на форму отдельный pFIBQuery?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.03.2010, 19:53   #18
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

artemavd, TpFIBQuery не предназначен для отображения данных через DataSource. Для этого служит TpFIBDataSet. Он, грубо говоря, объединяет 4 TpFIBQuery (Select, Insert, Update, Delete) и внутреннее представление набора отображаемых данных. Для отображения данных пропишите запрос Select. Для вставки - Insert, и т.д. Select обслуживается одним TpFIBTransaction, модифицирующие запросы - другими. Обратите внимание на опции poStartTransaction и poAutoCommit.

Ну и по запросу:
INSERT INTO KONTAKTY(ID,FAM,IMY,OTCHE,POL,DATAR OGD,ADRESS,DNOMER,MNOMER,FOTO) VALUES(null,:F,:I,:O,:P,:D,:A,:DN,: M,:FO) - не очень понятно, почему не
INSERT INTO KONTAKTY(FAM,IMY,OTCHE,POL,DATAROGD ,ADRESS,DNOMER,MNOMER,FOTO) VALUES(:F,:I,:O,:P,:D,:A,:DN,:M,:FO )

Ну а выполнять можно вот так
Form1.pDataSet1.ExecWP('F;I;O;P;D;A ;DN;M;FO',[Form1.RzLabel19.Caption,Form1.RzLab el20.Caption,Form1.RzLabel21.Captio n,
Form1.RzLabel33.Caption, Form1.RzLabel22.Caption, Trim(Form1.RzRichEdit1.Text),Form1. RzLabel23.Caption,
Form1.RzLabel26.Caption, 'Фото']);
Антон Ю.Б. вне форума Ответить с цитированием
Старый 12.09.2010, 07:03   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

C этой проблемой разобрался. Все работает через pFIBQuery. Вот рабочий код со всеми проверками, может кому пригодится:
Код:
procedure TForm1.BtnClick(Sender: TObject);
var
 i: integer;
begin
 for i:=1 to Form1.RzStringGrid2.RowCount - 1 do
 begin
  if Form1.RzStringGrid2.Cells[0,i] <> '' then
  begin
   Form1.pFIBQuery1.SQL.Clear;
   Form1.pFIBQuery1.SQL.Text:='INSERT INTO ARCHIVE(ID,NUMBER_PACKAGE,NUMBER_PAGE,NUMBER_CONTRACT,NUMBER_LS,NUMBER_APPLICATION,PATH) VALUES(NULL,:NPAC,:NPAG,:NC,:NL,:NA,:P)';
   Form1.pFIBQuery1.ParamByName('NPAC').Value:=StrToInt(Form1.RzStringGrid2.Cells[0,i]);
   Form1.pFIBQuery1.ParamByName('NPAG').Value:=StrToInt(Form1.RzStringGrid2.Cells[1,i]);
   Form1.pFIBQuery1.ParamByName('NC').Value:=StrToInt(Form1.RzStringGrid2.Cells[2,i]);
   Form1.pFIBQuery1.ParamByName('NL').Value:=StrToInt(Form1.RzStringGrid2.Cells[3,i]);
   Form1.pFIBQuery1.ParamByName('NA').Value:=StrToInt(Form1.RzStringGrid2.Cells[4,i]);
   Form1.pFIBQuery1.ParamByName('P').Value:=Form1.RzStringGrid2.Cells[5,i];
   Form1.pFIBQuery1.ExecQuery;
  end;
 end;
end;
Вопрос: как обновить сразу после вставки записи, чтобы изменения были видны сразу после вставки?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 12.09.2010 в 07:59.
artemavd вне форума Ответить с цитированием
Старый 12.09.2010, 10:35   #20
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

artemavd, а попробуй ка так:
Код:
Form1.pFIBDataSet1.Close;
Form1.pFIBDataSet1.SelectSQL.Text:='SELECT * FROM kontakty';
Form1.pFIBDataSet1.InsertSQL.Text:='INSERT INTO KONTAKTY(FAM,IMY,OTCHE,POL,DATAROGD,ADRESS,DNOMER,MNOMER,FOTO) VALUES(:F,:I,:O,:P,:D,:A,:DN,:M,:FO)';
Form1.pFIBDataSet1.Open;
Form1.pFIBDataSet1.Insert;
Form1.pFIBDataSet1.ParamByName('F').Value:=Form1.RzLabel19.Caption;
Form1.pFIBDataSet1.ParamByName('I').Value:=Form1.RzLabel20.Caption;
Form1.pFIBDataSet1.ParamByName('O').Value:=Form1.RzLabel21.Caption;
Form1.pFIBDataSet1.ParamByName('P').Value:=Form1.RzLabel33.Caption;
Form1.pFIBDataSet1.ParamByName('D').Value:=Form1.RzLabel22.Caption;
Form1.pFIBDataSet1.ParamByName('A').Value:=Trim(Form1.RzRichEdit1.Text);
Form1.pFIBDataSet1.ParamByName('DN').Value:=Form1.RzLabel23.Caption;
Form1.pFIBDataSet1.ParamByName('M').Value:=Form1.RzLabel26.Caption;
Form1.pFIBDataSet1.ParamByName('FO').Value:='Фото';
Form1.pFIBDataSet1.Post;
жаль нет набора дельфи+фиб под рукой - написал бы всё это короче и точнее
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 12.09.2010 в 10:37.
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при создании БД Firebird через IBExpert artemavd БД в Delphi 7 18.05.2010 22:59
ошибка при запросе добавления Rin БД в Delphi 4 26.12.2009 01:41
Ошибка при декларировании функции в Firebird из UDF shurik_7866 БД в Delphi 1 30.07.2007 08:55
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37