|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
cannot perform this operation on a closed dataset
Добрый день! Есть такая проблемка: в наследство досталась программа, которая связывается с SQL сервером. Поставил вместо старого sql 2005 b поменял в ADOConnection путь. Теперь выдает ошибку: cannot perform this operation on a closed dataset (сама программа загружается и данные отображаются, это только когда начинаешь редактировать). В коде есть вот такая ерунда:
Код:
begin Application.ProcessMessages; sConnection := 'Provider=SQLOLEDB.1;' + 'Integrated Security=SSPI;' + // 'Persist Security Info=False;'+ // 'User ID=sа;'+ 'Initial Catalog='+ ConfigParams.FindParam('DATABASE').Value+';'+ 'Data Source='+ ConfigParams.FindParam('SERVER-GET\SQL').Value+';'+ 'Use Procedure for Prepare=1;'+ 'Auto Translate=True;'+ 'Packet Size=4096;'+ 'Workstation ID='+s+ ';'+ 'Use Encryption for Data=False;'+ 'Tag with column collation when possible=False'; end; Пробовал и Integrated Security и через Юзера, толку нет. Самое интересное, что есть еще программа, которая работает с этой же базой, она работает полностью и редактировать данные можно. Гугл прошерстил, похожего именно на мою проблему нет. Где все-таки косяк? В Делфи или SQL (на сервере проверка подлинности стоит и Windows и SQl)? Последний раз редактировалось SashaBucheR, 12.07.2013 в 10:42. |
#2
|
||||
|
||||
не здесь ли валится?
Код:
ConfigParams.FindParam('DATABASE').Value Т.е. соединения с базой не устанавливается? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Я когда в ADOConnection проверяю связь, пишет, что подключение выполнено. И программа же данные показывает, загружается из базы. А вот именно корректировать нельзя. То есть она closed.
Тем более, она при старом sql работало. То есть код должен быть рабочий. Если удалить строку ConfigParams то же самое выскакивает. Последний раз редактировалось SashaBucheR, 11.07.2013 в 16:53. |
#4
|
||||
|
||||
код выше совсем не при делах... показывай код что на кнопке редактировать\сохранить
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
|||
|
|||
Выбивает на строке OpenADOTables
Код:
procedure TDM.DataModuleCreate(Sender: TObject); begin ConfigParams := TParams.Create; LoadConfig(ExtractFilePath(Application.ExeName)+'config.ini'); BuildConnection; OpenADOTables end; Вот здесь например, при создании новой карточки: Код:
procedure TfrmCardsIn.NewInvoiceIn; var mR : integer; begin SetEnebledControl(ATYPE); DM.tblInvoiceIn.Append; DM.tblInvoiceIn['TYPE'] := ATYPE; case ATYPE of 0: begin DM.tblInvoiceIn['XDSTID']:= '99999'; DM.tblInvoiceIn['XSRCID']:= '0'; DM.tblInvoiceIn.FieldByName('GUID').Value := DM.tblInvoiceMax.FieldByName('AMAX').AsInteger + 1; DM.tblInvoiceIn.FieldByName('SERIES').Value := DM.tblMaxNumber.FieldByName('SERIES').AsString ; DM.tblInvoiceIn.FieldByName('ANUMBER1').Value := DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ANUMBER2').Value := DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ADATE').Value := StrToDate(DM.ConfigParams.FindParam('WorkDate').Value); DM.tblInvoiceIn.FieldByName('DSTAMOUNT').Value := 0; DM.tblInvoiceIn.FieldByName('SRCAMOUNT').Value := 0; end; 1: begin DM.tblInvoiceIn['XDSTID']:= '0'; DM.tblInvoiceIn['XSRCID']:= '0'; DM.tblInvoiceIn.FieldByName('GUID').Value := DM.tblInvoiceMax.FieldByName('AMAX').AsInteger + 1; DM.tblInvoiceIn.FieldByName('SERIES').Value := DM.tblMaxNumber.FieldByName('SERIES').AsString ; DM.tblInvoiceIn.FieldByName('ANUMBER1').Value := DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ANUMBER2').Value := DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ADATE').Value := StrToDate(DM.ConfigParams.FindParam('WorkDate').Value); DM.tblInvoiceIn.FieldByName('DSTAMOUNT').Value := 0; DM.tblInvoiceIn.FieldByName('SRCAMOUNT').Value := 0; DM.tblMinNumber.Parameters.ParamByName('@SELFDIRID').Value := DM.tblInvoiceIn.FieldByName('XDSTID').AsString; DM.tblMinNumber.Open; DM.tblInvoiceIn.FieldByName('SERIES').AsString := DM.tblMinNumber.FieldByName('SERIES').AsString; DM.tblInvoiceIn.FieldByName('ANUMBER1').AsInteger := DM.tblMinNumber.FieldByName('ANUMBER').AsInteger; DM.tblInvoiceIn.FieldByName('ANUMBER2').AsInteger := DM.tblMinNumber.FieldByName('ANUMBER').AsInteger; DM.tblMinNumber.Close end; 2: begin DM.tblInvoiceIn['XDSTID']:= '0'; DM.tblInvoiceIn['XSRCID']:= '99999'; DM.tblInvoiceIn.FieldByName('GUID').Value := DM.tblInvoiceMax.FieldByName('AMAX').AsInteger + 1; DM.tblInvoiceIn.FieldByName('SERIES').Value := DM.tblMaxNumber.FieldByName('SERIES').AsString ; DM.tblInvoiceIn.FieldByName('ANUMBER1').Value := 0;//DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ANUMBER2').Value := 0;//DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ADATE').Value := StrToDate(DM.ConfigParams.FindParam('WorkDate').Value); DM.tblInvoiceIn.FieldByName('DSTAMOUNT').Value := 0; DM.tblInvoiceIn.FieldByName('SRCAMOUNT').Value := 0; end; 3: begin DM.tblInvoiceIn['XDSTID']:= '0'; DM.tblInvoiceIn['XSRCID']:= '99999'; DM.tblInvoiceIn.FieldByName('GUID').Value := DM.tblInvoiceMax.FieldByName('AMAX').AsInteger + 1; DM.tblInvoiceIn.FieldByName('SERIES').Value := DM.tblMaxNumber.FieldByName('SERIES').AsString ; DM.tblInvoiceIn.FieldByName('ANUMBER1').Value := 0;//DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ANUMBER2').Value := 0;//DM.tblMaxNumber.FieldByName('ANUMBER').AsInteger + 1; DM.tblInvoiceIn.FieldByName('ADATE').Value := StrToDate(DM.ConfigParams.FindParam('WorkDate').Value); DM.tblInvoiceIn.FieldByName('DSTAMOUNT').Value := 0; DM.tblInvoiceIn.FieldByName('SRCAMOUNT').Value := 0; end; end; Mr := frmEditCard.ShowModal; if mR = mrOK then begin try DM.tblInvoiceIn.Post; case ATYPE of 0: DM.qryInvoiceIn.Requery; 1: DM.qryInvoiceReplace.Requery; 2: DM.qryInvoiceRemove.Requery; 3: DM.qryInvoiceSpoil.Requery; end; //(dsCards.DataSet).Refresh; dsCards.DataSet.Locate('GUID',DM.tblInvoiceIn['GUID'],[]) except on E: Exception do begin ShowMessage(E.Message); DM.tblInvoiceIn.Cancel end end; end else DM.tblInvoiceIn.Cancel end; Вот содержание файла Config.ini: PictureName = T:\Programs\Other\Kachie\123.JPG WorkDate = 01.01.2012 ZPArcDir = D:\!Kachie\ZPArxiv ZPDir1 = D:\!Kachie\zarpl ZPDir2 = D:\!Kachie\Rabzar TabelDir = D:\!Kachie\TabelArxiv BankListDir = D:\!Kachie\zarpl\Spiski\001 TabelPrintFileName = Табель SERVER = SERVER-GET\SQL DATABASE = ORPP Там была проблема в таблицах. В ComboBox как-то DataSource сбились. Вот только теперь выдает "Exception class EDatabaseError with message: Circular datalinks are not allowed" при создании формы. В DataSource не тот Table указал. Теперь все заработало! Спасибо! Последний раз редактировалось SashaBucheR, 18.07.2013 в 11:40. |