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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 03:29   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию ошибка в tFIBDataSet при использовании параметров.

Проблема в следующем первый код работает как положено
Код:
begin
   pic:=TJpegImage.Create;
   ms := TMemoryStream.Create;
   pic.Assign(Image1.Picture.Graphic);
   pic.SaveToStream(ms);
   Form1.pFIBDataSet1.Close;
   Form1.pFIBDataSet1.SQLs.SelectSQL.text:='UPDATE NT SET    KOL='+edit1.Text+' , "ИМЯ"='+chr(39)+edit2.text+chr(39)+',"ФОТО"=:n where KOL='+edit3.text+' and "ИМЯ"='+chr(39)+edit4.text+chr(39)+';';
  Form1.pFIBDataSet1.ParamByName('n').LoadFromStream(ms);
  Form1.pFIBDataSet1.Open;
  Form1.pFIBDataSet1.Active:=True;
  Form1.pFIBDataSet1.Transaction.Commit;
end;
А вот второй ругается на параметр n. В чем проблема я не знаю уже голову сломал

Код:
 begin
         msAddData:= TMemoryStream.Create;
         SaveInfFoto.SaveToStream(msAddData);
         //формирование запроса на обновление записи
         DM.FIBDS.Close;
         DM.FIBDS.SQLs.SelectSQL.text:='UPDATE SOTRUDNIKI SET ROLE='+chr(39)+RoleName.text+chr(39)+
         ',PAS='+chr(39)+PasUser.text+chr(39)+',"№ УДОСТОВЕРЕНИЯ"='+chr(39)+sotrNamber.text+
         chr(39)+',"ИМЯ"='+chr(39)+Name.text+',"ФАМИЛИЯ"='+chr(39)+sername.text+chr(39)+
         ',"ОТЧЕСТВО"='+chr(39)+Otchestvo.text+chr(39)+',"ТЕЛЕФОН"='+chr(39)+telefon.text+
         chr(39)+',"АДРЕС ЭЛ. ПОЧТЫ"='+chr(39)+adrespoch.text+chr(39)+',"№ АГЕНСТВА"='+
         chr(39)+adresagenstva.text+chr(39)+',"ДАТА ПРИЕМА"='+chr(39)+datapriema.text+
         chr(39)+',"ДАТА УВОЛЬНЕНИЯ"='+chr(39)+DataUvalPer+chr(39)+',"СТАТУС"='+
         chr(39)+status.Text+chr(39)+',"ОБРАЗОВАНИЕ"='+chr(39)+obrazovanie.text+chr(39)+
         ',"ДОП. ОБРАЗОВАНИЕ"='+chr(39)+dopobrzovanie.text+chr(39)+',"ПРИМЕЧАНИЕ"='+chr(39)+
         Memo1.text+chr(39)+',"ДОЛЖНОСТЬ"='+chr(39)+Dolgnost.Text+chr(39)+
         ',"ФОТО"=:n WHERE'+
         'ROLE='+chr(39)+SaveInf[13]+chr(39)+',PAS='+chr(39)+SaveInf[14]+chr(39)+
         ',"№ УДОСТОВЕРЕНИЯ"='+chr(39)+SaveInf[15]+chr(39)+',"ИМЯ"='+chr(39)+SaveInf[1]+
         chr(39)+',"ФАМИЛИЯ"='+chr(39)+SaveInf[2]+chr(39)+',"ОТЧЕСТВО"='+chr(39)+SaveInf[3]+chr(39)+
         ',"ТЕЛЕФОН"='+chr(39)+SaveInf[4]+chr(39)+',"АДРЕС ЭЛ. ПОЧТЫ"='+chr(39)+SaveInf[5]+
         chr(39)+',"№ АГЕНСТВА"='+chr(39)+SaveInf[6]+chr(39)+',"ДАТА ПРИЕМА"='+chr(39)+
         SaveInf[7]+chr(39)+',"ДАТА УВОЛЬНЕНИЯ"='+chr(39)+DataUvalPer+chr(39)+',"СТАТУС"='+
         chr(39)+SaveInf[8]+chr(39)+',"ОБРАЗОВАНИЕ"='+chr(39)+SaveInf[9]+chr(39)+
         ',"ДОП. ОБРАЗОВАНИЕ"='+chr(39)+SaveInf[10]+chr(39)+',"ПРИМЕЧАНИЕ"='+chr(39)+
         SaveInf[11]+chr(39)+',"ДОЛЖНОСТЬ"='+chr(39)+SaveInf[12]+chr(39)+';';
         DM.FIBDS.ParamByName('n').LoadFromStream(msAddData);
         //конец формирования запроса
         DM.FIBDS.open;
         DM.FIBDS.Active:=True;
         DM.FIBDS.Transaction.Commit;
      end;//конец внесения изменений
В принципе они идентичны только добавлено больше столбцов таблицы

Нашел ошибку после Where запятые заменил на and но ошибка осталась.

Последний раз редактировалось Lokos; 25.05.2010 в 03:35.
Lokos вне форума Ответить с цитированием
Старый 25.05.2010, 08:06   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Во втором коде даже разбираться не стал, даже не стал в этой каше искать слово WHERE. Перепишите второй код с использованием функции QuotedStr вместо chr(39). Уважайте в первую очередь тех, к кому Вы обращаетесь за помощью, т.к. разбираться в такой каше мало кому из форумчан захочется.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.05.2010, 08:28   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Все для вас хотя я не думаю что очень наглядней получилось
Работающий код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
pic:TJpegImage;
  ms: TMemoryStream;
begin
pic:=TJpegImage.Create;
   ms := TMemoryStream.Create;
   pic.Assign(Image1.Picture.Graphic);
   pic.SaveToStream(ms);
 Form1.pFIBDataSet1.Close;
 Form1.pFIBDataSet1.SQLs.UpdateSQL.text:='UPDATE NT SET KOL='+edit1.Text+
' , "ИМЯ"='+QuotedStr(edit2.text)+',"ФОТО"=:n where KOL='+edit3.text+' and "ИМЯ"='+QuotedStr(edit4.text)+';';
  Form1.pFIBDataSet1.ParamByName('n').LoadFromStream(ms);
 Form1.pFIBDataSet1.Open;
 Form1.pFIBDataSet1.Active:=True;
 Form1.pFIBDataSet1.Transaction.Commit;
 end;
Код который выдает ошибку

Код:
 begin
         jpgAddData:=TJpegImage.Create;
         msAddData:= TMemoryStream.Create;
         jpgAddData.Assign(Image2.Picture.Graphic);
         jpgAddData.SaveToStream(msAddData);
         //формирование запроса на обновление записи
         DM.FIBDS.Close;;
         DM.FIBDS.SQLs.UpdateSQL.Text:='UPDATE SOTRUDNIKI SET'+
         'ROLE='+QuotedStr(RoleName.text)+
         ',PAS='+QuotedStr(PasUser.text)+
         ',"№ УДОСТОВЕРЕНИЯ"='+QuotedStr(sotrNamber.text)+
         ',"ИМЯ"='+QuotedStr(Name.text)+
         ',"ФАМИЛИЯ"='+QuotedStr(sername.text)+
         ',"ОТЧЕСТВО"='+QuotedStr(Otchestvo.text)+
         ',"ТЕЛЕФОН"='+QuotedStr(telefon.text)+
         ',"АДРЕС ЭЛ. ПОЧТЫ"='+QuotedStr(adrespoch.text)+
         ',"№ АГЕНСТВА"='+QuotedStr(adresagenstva.text)+
         ',"ДАТА ПРИЕМА"='+QuotedStr(datapriema.text)+
         ',"ДАТА УВОЛЬНЕНИЯ"='+ QuotedStr(DataUvalPer)+
         ',"СТАТУС"='+QuotedStr(status.Text)+
         ',"ОБРАЗОВАНИЕ"='+QuotedStr(obrazovanie.text)+
         ',"ДОП. ОБРАЗОВАНИЕ"='+QuotedStr(dopobrzovanie.text)+
         ',"ПРИМЕЧАНИЕ"='+QuotedStr(Memo1.text)+
         ',"ФОТО"=:foto ,"ДОЛЖНОСТЬ"='+QuotedStr(Dolgnost.Text)+
         '  WHERE ROLE='+QuotedStr(SaveInf[13])+
         ' and PAS='+QuotedStr(SaveInf[14])+
         ' and "№ УДОСТОВЕРЕНИЯ"='+QuotedStr(SaveInf[15])+
         ' and "ИМЯ"='+QuotedStr(SaveInf[1])+
         ' and "ФАМИЛИЯ"='+QuotedStr(SaveInf[2])+
         ' and "ОТЧЕСТВО"='+QuotedStr(SaveInf[3])+
         ' and "ТЕЛЕФОН"='+QuotedStr(SaveInf[4])+
         ' and "АДРЕС ЭЛ. ПОЧТЫ"='+QuotedStr(SaveInf[5])+
         ' and "№ АГЕНСТВА"='+QuotedStr(SaveInf[6])+
         ' and "ДАТА ПРИЕМА"='+QuotedStr(SaveInf[7])+
         ' and "ДАТА УВОЛЬНЕНИЯ"='+QuotedStr(DataUvalPer)+
         ' and "СТАТУС"='+ QuotedStr(SaveInf[8])+
         ' and "ОБРАЗОВАНИЕ"='+QuotedStr(SaveInf[9])+
         ' and "ДОП. ОБРАЗОВАНИЕ"='+QuotedStr(SaveInf[10])+
         ' and "ПРИМЕЧАНИЕ"='+QuotedStr(SaveInf[11])+
         ' and "ДОЛЖНОСТЬ"='+QuotedStr(SaveInf[12])+';';
         DM.FIBDS.ParamByName('foto').LoadFromStream(msAddData);
         //конец формирования запроса
         DM.FIBDS.Post;
         DM.FIBDS.Active:=True;
         DM.FIBDS.Transaction.Commit;
         msAddData.Free;
         jpgAddData.Free;
end;

Последний раз редактировалось Lokos; 25.05.2010 в 08:36.
Lokos вне форума Ответить с цитированием
Старый 25.05.2010, 08:39   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Так попробуйте (перед where убрал ковыычку):
Код:
begin
         jpgAddData:=TJpegImage.Create;
         msAddData:= TMemoryStream.Create;
         jpgAddData.Assign(Image2.Picture.Graphic);
         jpgAddData.SaveToStream(msAddData);
         //формирование запроса на обновление записи
         DM.FIBDS.Close;;
         DM.FIBDS.SQLs.UpdateSQL.Text:='UPDATE SOTRUDNIKI SET ROLE='+QuotedStr(RoleName.text)+
         ',PAS='+QuotedStr(PasUser.text)+',"№ УДОСТОВЕРЕНИЯ"='+QuotedStr(sotrNamber.text)+
         ',"ИМЯ"='+QuotedStr(Name.text)+',"ФАМИЛИЯ"='+QuotedStr(sername.text)+
         ',"ОТЧЕСТВО"='+QuotedStr(Otchestvo.text)+',"ТЕЛЕФОН"='+QuotedStr(telefon.text)+
         ',"АДРЕС ЭЛ. ПОЧТЫ"='+QuotedStr(adrespoch.text)+',"№ АГЕНСТВА"='+
         QuotedStr(adresagenstva.text)+',"ДАТА ПРИЕМА"='+QuotedStr(datapriema.text)+
         ',"ДАТА УВОЛЬНЕНИЯ"='+QuotedStr(DataUvalPer)+',"СТАТУС"='+
         QuotedStr(status.Text)+',"ОБРАЗОВАНИЕ"='+QuotedStr(obrazovanie.text)+
         ',"ДОП. ОБРАЗОВАНИЕ"='+QuotedStr(dopobrzovanie.text)+',"ПРИМЕЧАНИЕ"='+
         QuotedStr(Memo1.text)+',"ФОТО"=:foto ,"ДОЛЖНОСТЬ"='+QuotedStr(Dolgnost.Text)+
         '  WHERE ROLE='+QuotedStr(SaveInf[13])+' and PAS='+QuotedStr(SaveInf[14])+ ' and "№ УДОСТОВЕРЕНИЯ"='+QuotedStr(SaveInf[15])+' and "ИМЯ"='+QuotedStr(SaveInf[1])+
         ' and "ФАМИЛИЯ"='+QuotedStr(SaveInf[2])+' and "ОТЧЕСТВО"='+QuotedStr(SaveInf[3])+ ' and "ТЕЛЕФОН"='+QuotedStr(SaveInf[4])+' and "АДРЕС ЭЛ. ПОЧТЫ"='+QuotedStr(SaveInf[5])+' and "№ АГЕНСТВА"='+QuotedStr(SaveInf[6])+' and "ДАТА ПРИЕМА"='+
         QuotedStr(SaveInf[7])+' and "ДАТА УВОЛЬНЕНИЯ"='+QuotedStr(DataUvalPer)+' and "СТАТУС"='+
         QuotedStr(SaveInf[8])+' and "ОБРАЗОВАНИЕ"='+QuotedStr(SaveInf[9])+
         ' and "ДОП. ОБРАЗОВАНИЕ"='+QuotedStr(SaveInf[10])+' and "ПРИМЕЧАНИЕ"='+
         QuotedStr(SaveInf[11])+' and "ДОЛЖНОСТЬ"='+QuotedStr(SaveInf[12])+';
         DM.FIBDS.ParamByName('foto').LoadFromStream(msAddData);
         //конец формирования запроса
         DM.FIBDS.Post;
         DM.FIBDS.Active:=True;
         DM.FIBDS.Transaction.Commit;
         msAddData.Free;
         jpgAddData.Free;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.05.2010, 08:45   #5
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

эм что то я просмотрел и не понял какую ковычку
не путаете с запятой после "ФОТО" ?

Последний раз редактировалось Lokos; 25.05.2010 в 08:47.
Lokos вне форума Ответить с цитированием
Старый 25.05.2010, 08:49   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Нет, я смотрел только на условие WHERE. Вот здесь:
Код:
 '  WHERE ROLE='+
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.05.2010, 08:51   #7
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Нет, я смотрел только на условие WHERE. Вот здесь:
Код:
 '  WHERE ROLE='+
так ну я не могу ее убрать тогда delphy будет считать что это код а не текстовая информация которую нужно передать в updateSql.text
Lokos вне форума Ответить с цитированием
Старый 25.05.2010, 08:53   #8
Akil
Новичок
Джуниор
 
Регистрация: 25.05.2010
Сообщений: 3
По умолчанию

Здраствуйте. подскажите для Delphi 7 какую Ms SQL Server поставить? заранее спасибо.
Akil вне форума Ответить с цитированием
Старый 25.05.2010, 08:53   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Какую именно Delphi пишет ошибку? Дословно и в каком месте кода.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.05.2010, 08:54   #10
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Akil Посмотреть сообщение
Здраствуйте. подскажите для Delphi 7 какую Ms SQL Server поставить? заранее спасибо.
да наверно любую
Lokos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка (error code 0) при использовании libmysql.dll kr00t БД в Delphi 4 28.04.2011 15:58
Ошибка при использовании WorksheetFunction.VLookup imagenable@mail.ru Microsoft Office Excel 2 26.02.2010 12:04
Ошибка при использовании copyfile The Best Общие вопросы Delphi 20 22.07.2009 13:26
Ошибка List index out of bounds(0) при использовании запроса AdoQuery ArtInt БД в Delphi 14 15.04.2009 18:35