Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при добавлении записи в бд методом Insert 
:(
    Опции темы
Evenstain
Дата 22.2.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



следующая проблема: 
подключил Foxpro базу через ADO и когда пытаюсь добавить в БД запись с помощью метода Insert возникает следующая ошибка:

user posted image


вот приблизительный код, который я использую!
Код

ADOTable1.Active:=false;
ADOTable1.TableName:='sotrudniki';
ADOTable1.Active:=true;

ADOTable1.Insert;

ADOTable1.FieldByName('kod').AsInteger:=strToInt(Edit3.Text) ;
ADOTable1.FieldByName('fio').AsString:=edit1.Text;
ADOTable1.FieldByName('inn').AsInteger:=strtoint(Edit6.Text);
ADOTable1.FieldByName('adress').AsString:=Edit5.Text;
ADOTable1.FieldByName('data_rozhdenia').AsDateTime:=StrToDate(Edit4.Text);
ADOTable1.FieldByName('nomer_pfr').AsInteger:=strtoint(Edit7.Text);
ADOTable1.FieldByName('data_prinyatiya').AsDateTime:=StrToDate(Edit8.Text);
ADOTable1.FieldByName('oklad').AsInteger:=strToInt(Edit2.Text);

ADOTable1.Post;

подскажите, пожалуйста,из за чего может возникать такая ошибка и как от нее избавиться?
заранее благодарен
з.ы. используя метод Edit для редактирования определенной записи, все работает просто замечательно. в данном же случае почему то возникает ошибка  
PM MAIL   Вверх
Данкинг
Дата 22.2.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Через какой провайдер подключаешь?? Ну, попробуй вместо Insert использовать Append. А вообще ещё лучше запросом значения вставлять.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Evenstain
Дата 22.2.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(Данкинг @ 22.2.2010,  18:15)
Через какой провайдер подключаешь?? Ну, попробуй вместо Insert использовать Append. А вообще ещё лучше запросом значения вставлять.

провайдер - Microsoft OLE DB Provider for Visual FoxPro
сейчас попробую через sql - запрос
PM MAIL   Вверх
Данкинг
Дата 22.2.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Evenstain @  22.2.2010,  18:28 Найти цитируемый пост)
провайдер - Microsoft OLE DB Provider for Visual FoxPro

В таком случае, впервые узнаю, что с ним можно редактировать записи с помощью .Edit.  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Evenstain
Дата 22.2.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(Данкинг @ 22.2.2010,  18:32)
Цитата(Evenstain @  22.2.2010,  18:28 Найти цитируемый пост)
провайдер - Microsoft OLE DB Provider for Visual FoxPro

В таком случае, впервые узнаю, что с ним можно редактировать записи с помощью .Edit.  smile

а что тут удивительного?! я имел ввиду что то типа

Код

ADOTable1.Active:=false;
ADOTable1.TableName:='sotrudniki';
ADOTable1.Active:=true;
While ADOTable1.FieldByName('fio').AsString<>edit1.Text do
ADOTable1.Next;
ADOTable1.Edit;
ADOTable1.FieldByName('kod').AsInteger:=strToInt(Edit3.Text);
.......................................
.......................................
.......................................
ADOTable1.Post;


кстати, через запрос получилось вроде
PM MAIL   Вверх
Данкинг
Дата 22.2.2010, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Evenstain @  22.2.2010,  19:10 Найти цитируемый пост)
я имел ввиду что то типа

Так это реально рабочий код? 

Цитата(Evenstain @  22.2.2010,  19:10 Найти цитируемый пост)
кстати, через запрос получилось вроде 

Через запрос-то понятно, что получилось. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Evenstain
Дата 23.2.2010, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(Данкинг @ 22.2.2010,  19:30)
Так это реально рабочий код?

конечно рабочий. проверь, если не веришь  smile 

но лучше наверно все таки тоже через запрос сделать. так и поступим  smile 

спасибо за совет   smile 

а вот как я сделал запрос для добавления новой записи

Код

with ADOQuery1 do
  begin
    Active:=false;
    SQL.Clear;
    SQL.add('INSERT INTO sotrudniki (тут необходимые поля) VALUES (:kod, :fio, :inn...............  тут параметры)');
    with Parameters do
      begin
        ParamByName('kod').Value:=strtoint(Edit3.Text);
        ParamByName('fio').Value:=Edit1.Text;
        ParamByName('inn').Value:= strtoint(Edit6.Text);
        ...............................................
        ...............................................          
      end;
    ExecSQL;
  end;

вроде правильно сделал  smile 

Это сообщение отредактировал(а) Evenstain - 23.2.2010, 02:03
PM MAIL   Вверх
Данкинг
Дата 23.2.2010, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Evenstain @  23.2.2010,  01:51 Найти цитируемый пост)
конечно рабочий. проверь, если не веришь

Н-да, и правда, почему-то я всегда думал, что таким образом DBF редактировать нельзя. smile 

Цитата(Evenstain @  23.2.2010,  01:51 Найти цитируемый пост)
но лучше наверно все таки тоже через запрос сделать. 

В данном случае - для добавления новой записи -  наверное, всё же логичней запросом.

Цитата(Evenstain @  23.2.2010,  01:51 Найти цитируемый пост)
а вот как я сделал запрос для добавления новой записи

Ну, это понятно. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
CROTishka
Дата 24.2.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Текст ошибки кстати копируется по Ctrl+C
PM MAIL   Вверх
Evenstain
Дата 25.2.2010, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(CROTishka @  24.2.2010,  16:10 Найти цитируемый пост)
Текст ошибки кстати копируется по Ctrl+C 

будем знать   smile 
PM MAIL   Вверх
Evenstain
Дата 4.3.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



а еще один вопрос.
вот я хочу обработать исключительную ситуацию возникновения ошибки класса EOleException

ну, например:

Цитата

---------------------------
Debugger Exception Notification
---------------------------
Project Zarplata.exe raised exception class EOleException with message 'Uniqueness of index INDEX is violated'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------



вот код, с помощью которого пытаюсь отловить ситуацию

Код

try
  .............
  .............
except
  on EOleException do 
begin
.................
.................
end
  ...
end;

но Delphi ругается, что нету такого класса ошибок как EOleException. видимо, я что то не понимаю. помогите, пожалуйста

P.S. написал в разделе type: EOleException = class(Exception); вроде работает, но ошибку не ловит. что я делаю не так??

Это сообщение отредактировал(а) Evenstain - 4.3.2010, 16:27
PM MAIL   Вверх
Fitc
Дата 4.3.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: нет
Всего: 4



Цитата(Evenstain @  4.3.2010,  16:13 Найти цитируемый пост)
P.S. написал в разделе type: EOleException = class(Exception); вроде работает, но ошибку не ловит. что я делаю не так??

Я так понимаю ты наследуешь класс Exception... и класс потомок EoleException поэтому работает
PM MAIL   Вверх
Evenstain
Дата 5.3.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



ну кто нибудь напишите как решить проблему. а то создам новую тему и захламлю форум  smile 
просто непонятно почему другие классы ошибок delphi видит, а EoleException нифига
PM MAIL   Вверх
pseud
Дата 5.3.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Evenstain @  4.3.2010,  16:13 Найти цитируемый пост)
P.S. написал в разделе type: EOleException = class(Exception); вроде работает, но ошибку не ловит. что я делаю не так??

читаем хелп:
Цитата

EOleException is the exception class for OLE automation errors that occur in methods or properties of an object.
Unit
ComObj

не создавай свой класс EOleException (не справшивай почему), а в uses пропиши ComObj.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Evenstain
Дата 6.3.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(pseud @ 5.3.2010,  16:47)
Цитата(Evenstain @  4.3.2010,  16:13 Найти цитируемый пост)
P.S. написал в разделе type: EOleException = class(Exception); вроде работает, но ошибку не ловит. что я делаю не так??

читаем хелп:
Цитата

EOleException is the exception class for OLE automation errors that occur in methods or properties of an object.
Unit
ComObj

не создавай свой класс EOleException (не справшивай почему), а в uses пропиши ComObj.

спасибо огромное! тока что то все равно не перехватывает ошибку, выдает как обычно

Цитата

---------------------------
Debugger Exception Notification
---------------------------
Project Zarplata.exe raised exception class EOleException with message 'Uniqueness of index INDEX is violated'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------


вот код, который использую
Код

try
  with ADOQuery2 do
  begin
    Active:=false;
    SQL.Clear;
    SQL.add('INSERT INTO zarplata (kod_sotr,date,oklad,premia,otpusk,doplata,ndfl) VALUES     (:kod_sotr,:date,:oklad,:premia,:otpusk,:doplata,:ndfl)');
    with Parameters do
      begin
        ParamByName('kod_sotr').Value:= ADOQuery3.fieldByName('kod').AsInteger;
        ParamByName('date').Value:=  dateS;
        ParamByName('oklad').Value:= ADOQuery3.fieldByName('oklad').AsInteger;
      ............................................................................
      end;
    ExecSQL;
  end;
 except
  on EOleException do Showmessage('Текст ошибки')
 end;



естественно добавил в uses ComObj, но не ловит все равно

Это сообщение отредактировал(а) Evenstain - 6.3.2010, 12:40
PM MAIL   Вверх
pseud
Дата 9.3.2010, 10:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Evenstain @  6.3.2010,  12:36 Найти цитируемый пост)
спасибо огромное! тока что то все равно не перехватывает ошибку, выдает как обычно

читай внимательно заголовок мессаги
Цитата

Debugger Exception Notification

т.е. в дебаге ты ее таки словишь, после этого вывалится твоя месага 'Текст ошибки'. Не в дебаге появится лишь 'Текст ошибки'.
Если ты и в дебаге не желаешь видеть EOleException, то включи ее в список игнорируемых дебагером месаг:
Цитата

Tools -> Debagger Options -> Language Exceptions -> Exception Types to Ignore -> (Отметить/Добавить) EOleException



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Evenstain
Дата 10.3.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.11.2008

Репутация: 1
Всего: 0



Цитата(pseud @ 9.3.2010,  10:09)
Цитата(Evenstain @  6.3.2010,  12:36 Найти цитируемый пост)
спасибо огромное! тока что то все равно не перехватывает ошибку, выдает как обычно

читай внимательно заголовок мессаги
Цитата

Debugger Exception Notification

т.е. в дебаге ты ее таки словишь, после этого вывалится твоя месага 'Текст ошибки'. Не в дебаге появится лишь 'Текст ошибки'.
Если ты и в дебаге не желаешь видеть EOleException, то включи ее в список игнорируемых дебагером месаг:
Цитата

Tools -> Debagger Options -> Language Exceptions -> Exception Types to Ignore -> (Отметить/Добавить) EOleException

ясно. спасибо за помощь  smile   smile 
жаль не могу поставить +1 к репе
PM MAIL   Вверх
Marduk
Дата 30.3.2010, 16:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 9.4.2007

Репутация: нет
Всего: 2



Ошибку можно отловить и так:
Код

try
...
//тут твой код
...
except on E: exception do
  ShowMessage('Ошибка: ' + E.Message);
end;


если в дебаггере отключаешь показ исключений, то это не значит что в проге они не появятся,
мне кажется правильнее когда в самой программе идет обработка ошибок
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1039 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.