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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 09:59   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Ошибка при запросе вставки. Firebird

Выполняю такой запрос:
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.Close;
 Form1.pFIBDataSet1.SQLs.SelectSQL.Clear;
 Form1.pFIBDataSet1.SQLs.InsertSQL.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.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.Open;
end;
Вроде как записано все правильно, но при нажатии на кнопку ругается и выдается ошибка: "Parameter "F" does not exist in Form1.pFIBDataSet1". Где я ошибся?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 10:53   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Form1.pFIBDataSet1.Open; уж сколько раз твердили миру!!!!!!!!
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.SQLs.InsertSQL.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.pFIBDataSet1.Insert;
 Form1.pFIBDataSet1.FieldByName('F').Value:=Form1.RzLabel19.Caption;
 Form1.pFIBDataSet1.FieldByName('I').Value:=Form1.RzLabel20.Caption;
 Form1.pFIBDataSet1.FieldByName('O').Value:=Form1.RzLabel21.Caption;
 Form1.pFIBDataSet1.FieldByName('P').Value:=Form1.RzLabel33.Caption;
 Form1.pFIBDataSet1.FieldByName('D').Value:=Form1.RzLabel22.Caption;
 Form1.pFIBDataSet1.FieldByName('A').Value:=Trim(Form1.RzRichEdit1.Text);
 Form1.pFIBDataSet1.FieldByName('DN').Value:=Form1.RzLabel23.Caption;
 Form1.pFIBDataSet1.FieldByName('M').Value:=Form1.RzLabel26.Caption;
 Form1.pFIBDataSet1.FieldByName('FO').Value:='Фото';
 Form1.pFIBDataSet1.post;
Form1.pFIBDataSet1.close;
Form1.pFIBDataSet1.open;
end;
А почему поле id заполняется null? и поменяй имена параметров на имена полей и поставь перед ними : и исправь соответсвенно в FieldByName('имя поля').Value
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 28.02.2010 в 11:00.
Sparky вне форума Ответить с цитированием
Старый 28.02.2010, 11:22   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
уж сколько раз твердили миру!!!!!!!!
Тшшш...
Цитата:
А почему поле id заполняется null?
Потому что оно автоикрементное. Не в нем проблема, оно правильно "работает".
Цитата:
и поменяй имена параметров на имена полей и поставь перед ними : и исправь соответсвенно в FieldByName('имя поля').Value
А вот мне наоборот говорили не делать этого: давать одинаковые имена полей и параметров.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 11:25   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

я точно не знаю как работают вот эти компоненты. Я написала то как бы отработали стандартные IBDataSet. У вас заработало? или проблема осталась?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 28.02.2010, 14:53   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
У вас заработало? или проблема осталась?
Нет, не заработало. Выполняя этот код:
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.SQLs.SelectSQL.Clear;
 Form1.pFIBDataSet1.SQLs.InsertSQL.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.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;
 Form1.pFIBDataSet1.close;
 Form1.pFIBDataSet1.Open;
end;
Выдается ошибка: "Can't change sql text because Form1.pFIBDataSet1.SelectQuery dataset open". Если примерно перевести ошибку, то получается так: "Текст SQL запроса не удается изменить потому что Form1.pFIBDataSet1.SelectQuery открыт". Как-то так.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 15:53   #6
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

и проверте открываете ли вы до этого данный датасет если нет, то открывайте его при создании формы, а вообще их лучше выносить в datamodule
уберите
Код:
Form1.pFIBDataSet1.SQLs.SelectSQL.Clear;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 28.02.2010, 16:11   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Убрал эту строчку, появилась старая ошибка: "Parameter "F" does not exist in Form1.pFIBDataSet1"
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 16:55   #8
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

ну то что я говрила проавильно убрали не надо это писать так как вы чистите часть отвечающую за представление данных, а потом пытаетесь ее открыть вызывая как раз тот запрос который хранился в selectSQL. Попробуйте сделать так как я предложила в начале с fieldbyname
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 28.02.2010, 17:25   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Сделал так:
Код:
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
 Form1.pFIBDataSet1.Edit;
 Form1.pFIBDataSet1.SQLs.InsertSQL.Text:='INSERT INTO KONTAKTY(ID,FAM,IMY,OTCHE,POL,DATAROGD,ADRESS,DNOMER,MNOMER,FOTO) VALUES(null,:FAM,:IMY,:OTCHE,:POL,:DATAROGD,:ADRESS,:DNOMER,:MNOMER,:FOTO)';
 Form1.pFIBDataSet1.FieldByName('FAM').Value:=Form1.RzLabel19.Caption;
 Form1.pFIBDataSet1.FieldByName('IMY').Value:=Form1.RzLabel20.Caption;
 Form1.pFIBDataSet1.FieldByName('OTCHE').Value:=Form1.RzLabel21.Caption;
 Form1.pFIBDataSet1.FieldByName('POL').Value:=Form1.RzLabel33.Caption;
 Form1.pFIBDataSet1.FieldByName('DATAROGD').Value:=Form1.RzLabel22.Caption;
 Form1.pFIBDataSet1.FieldByName('ADRESS').Value:=Trim(Form1.RzRichEdit1.Text);
 Form1.pFIBDataSet1.FieldByName('DNOMER').Value:=Form1.RzLabel23.Caption;
 Form1.pFIBDataSet1.FieldByName('MNOMER').Value:=Form1.RzLabel26.Caption;
 Form1.pFIBDataSet1.FieldByName('FOTO').Value:='Фото';
 Form1.pFIBDataSet1.Post;
 Form1.pFIBDataSet1.Close;
 Form1.pFIBDataSet1.Open;
end;
Теперь выдает ошибку: "pFIBDataSet1: Cannot modify a read-only dataset". Вроде бы вначале я ж поставил Form1.pFIBDataSet1.Edit.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.02.2010, 17:39   #10
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
 Form1.pFIBDataSet1.Edit;
нужно
Код:
 Form1.pFIBDataSet1.insert
Вы же собираетесь вставлять
и пишите эту строку после
Код:
 Form1.pFIBDataSet1.SQLs.InsertSQL.Text
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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