Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Как отловить ошибку при добавлени в БД методом Post   Найти похожие ветки 

 
Lixodei ©   (2006-11-27 09:06) [0]

Привет Всем! Выбираю данные из одной БД и пытаюсь их добавить в другую медом Post. Иногда прога почему то вылетает сообщая о следующей ошибке "Access to table disabled because of previous error. Read failure". А мне никак нельзя, чтобы программа вылетала, можно ли отловить ошибку на этапе добавления и просто не добавлять эту запись? Спасибо, за помощь!


 
Sergey13 ©   (2006-11-27 09:22) [1]

Вообще ошибки ловятся через try. Проверить то что будет записано можно в BeforePost принимающего датасета.


 
Lixodei ©   (2006-11-27 10:03) [2]

try не помогает, вылетает с той же ошибкой или может я не правильно делаю что. Через дебагер проверил данные на запись они соответствуют, тем которые нужны. Может есть с ними еще какой-то мусор, который я не вижу?, так как когда я переформировываю БД по данному полю ошибка переходит уже на другой записи

while not AdsQuery1.Eof do
begin
 with Table1 do
 begin
  Append;
  FieldByName("KOD").AsInteger:=AdsQuery1.FieldByName("DANAL1").AsInteger;
  FieldByName("PNAME").AsString:=AdsQuery1.FieldByName("PNAME").AsString;
  FieldByName("TYPE_DOC").AsString:=AdsQuery1.FieldByName("EXPR").AsString;
  FieldByName("NUMDOC").AsString:=AdsQuery1.FieldByName("NUMDOC").AsString;
  FieldByName("DATDOC").AsString:=AdsQuery1.FieldByName("DATDOC").AsString;
  FieldByName("DSUM").AsFloat:=AdsQuery1.FieldByName("SUM").AsFloat;
  FieldByName("T_DOC").AsInteger:=2;
  try
   Post;
  except
   Form1.Edit1.Text:="Ошибка "+AdsQuery1.FieldByName("DANAL1").AsString+" "+AdsQuery1.FieldByName("PNAME").AsString+" "+AdsQuery1.FieldByName("EXPR").AsString+" "+AdsQuery1.FieldByName("NUMDOC").AsString+" "+AdsQuery1.FieldByName("DATDOC").AsString+" "+AdsQuery1.FieldByName("SUM").AsString;
   sleep(1000);
  end;
 end;
 AdsQuery1.Next;
end;


 
Sergey13 ©   (2006-11-27 10:17) [3]

Я с dbf-ками со времен клиппера не работал. Как там насчет требований уникальности и/или заполненности? Может тут собака порылась? И почему бы не попробовать писать новые записи так-же через кверик запросом?


 
Lixodei ©   (2006-11-27 10:35) [4]

C уникальностью и заполненностью все в порядке, тут быть не может собаки ;] Разрядность полей тоже совпадает. А вы предлагаете писать данные не в table, а   кверик? Просто его все равно надо будет переписывать рано или поздно в тэйбл, так как инфа потом нужна в физическом сохранении. Начальный вопрос был в том, что разве нет больше инструмента кроме try чтобы ошибку отловить, например, как при проверке значения переменной при открытии файла или загрузке dll-ки?


 
ЮЮ ©   (2006-11-27 10:42) [5]


> не в table, а   кверик? Просто его все равно надо будет
> переписывать рано или поздно в тэйбл,


Имелось в виду исполнять запросы
INSERT INTO
вместо работы с TTable. Ибо отлуп по TQuery.Execute не должен привести к таким последствиям, как " "Access to table disabled because of previous error. Read failure""


 
Плохиш ©   (2006-11-27 12:14) [6]


> так как когда я переформировываю БД по данному полю ошибка
> переходит уже на другой записи

Это Вы сейчас на каком языке говорили?

>   except
      Cancel;
>    Form1.Edit1.Text:="Ошибка "+AdsQuery1.FieldByName("DANAL1").
> AsString+" "+AdsQuery1.FieldByName("PNAME").AsString+"

и запись будет пропущена.

> Просто его все равно надо будет переписывать рано или поздно
> в тэйбл, так как инфа потом нужна в физическом сохранении.

Классная такая чушь...


 
Anatoly Podgoretsky ©   (2006-11-27 12:23) [7]

> Lixodei  (27.11.2006 09:06:00)  [0]

because of previous error.


 
Lixodei ©   (2006-11-27 13:09) [8]


> Это Вы сейчас на каком языке говорили?

На русском, а что не видно? БД из которой выбираю данные формирует другая прога, ей и перезаполняю, ошибка в уже в другой записи.

> Классная такая чушь...

А разве квейри - это не набор данных оформленный в виде виртуальной таблицы
Поэтому я думаю, что не чушь я писал


 
MsGuns ©   (2006-11-27 16:47) [9]

Судя по [2] данные из одной таблицы (запроса) добавляются в другую. Почему нельзя это сделать запросом ?


 
Lixodei ©   (2006-11-29 11:59) [10]


> MsGuns ©   (27.11.06 16:47) [9]
, да действительно можно сделать запросом, но вот при запросе SQL возникает проблема при передаче параметра. Поле KOD имеет тип numeric(5,0), а в Delphi такого типа нет. Аналогичный ему должен быть Integer, но  SQL ругаеться на несовместимость. Может другой надо использовать тип?
 
Query1.SQL.Add("INSERT INTO otchet (KOD) VALUES (:D)");
Query1.ParamByName("D").AsInteger:=AdsQuery1.FieldByName("KOD").AsString;


 
Anatoly Podgoretsky ©   (2006-11-29 12:15) [11]

> Lixodei  (29.11.2006 11:59:10)  [10]

На левую или правую часть?
Что сообзает компонент о типах в рантайм


 
Lixodei ©   (2006-11-29 12:53) [12]

Query1.ParamByName("D").As... нужен другой тип, при присвоении все проходит нормально, ошибка когда выполняется. Если поменять тип поля KOD в самой БД, то все отлично


 
Anatoly Podgoretsky ©   (2006-11-29 13:10) [13]

Еще большими загадками стал говорить.
Кто на чем стоял?


 
Lixodei ©   (2006-11-29 13:18) [14]

Постараюсь понятнее. Есть таблица из нее происходит выборка данных по нескольким полям на SQL и записываться в ADSQuery1. Среди них есть несколько  полей с типом numeric. Теперь эти данные надо записать в другую таблицу otchet. Это я пытаюсь сделать кодом[пример приведен в [10]] на этапе выполнения которого вылетает ошибка не совместимость типов.


 
Плохиш ©   (2006-11-29 13:40) [15]


> Lixodei ©   (29.11.06 11:59) [10]


> Query1.ParamByName("D").AsInteger:=AdsQuery1.FieldByName("KOD").AsString;

Афигеть - дурдом....


 
Lixodei ©   (2006-11-29 13:45) [16]


> Афигеть - дурдом....

Точно дурдом, это я просто криво поправил, уже путаюсь блин в строках, извините.
 Query1.SQL.Add("INSERT INTO simple (KOD) VALUES (:D)");
 Query1.ParamByName("D").AsInteger:=AdsQuery1.FieldByName("DANAL1").AsInteger;


 
Lixodei ©   (2006-11-29 14:44) [17]


> NSERT INTO
> вместо работы с TTable. Ибо отлуп по TQuery.Execute не должен
> привести к таким последствиям, как " "Access to table disabled
> because of previous error. Read failure""

Приводит к той же ошибке, что и была при работе с TTable

while not AdsQuery1.Eof do
begin
 Table1.Active:=false;
 Query1.Active:=False;
 Query1.FetchAll;
 Query1.DatabaseName:=""+Unit1.Work_dir+"\DATA";
 Query1.SQL.Clear;
 Query1.SQL.Add("INSERT INTO otchet (KOD,PNAME,TYPE_DOC,NUMDOC,DATDOC,DSUM,T_DOC) VALUES (");
 Query1.SQL.Add(":D,:P,:E,:N,:D1,:S,:T)");
 Query1.ParamByName("D").AsFloat:=AdsQuery1.FieldByName("DANAL1").AsFloat;
 Query1.ParamByName("P").AsString:=Trim(AdsQuery1.FieldByName("PNAME").AsString);
 Query1.ParamByName("E").AsString:=AdsQuery1.FieldByName("EXPR").AsString;
 Query1.ParamByName("N").AsString:=Trim(AdsQuery1.FieldByName("NUMDOC").AsString) ;
 Query1.ParamByName("D1").AsDateTime:=AdsQuery1.FieldByName("DATDOC").AsDateTime;
 Query1.ParamByName("S").AsFloat:=AdsQuery1.FieldByName("SUM").AsFloat;
 Query1.ParamByName("T").AsFloat:=2;
 Query1.ExecSQL;
 AdsQuery1.Next;
end;



Страницы: 1 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.066 c
15-1164306475
ZMan
2006-11-23 21:27
2006.12.17
Найти песенку


2-1164646397
Алик
2006-11-27 19:53
2006.12.17
Мигание TPaintBox при перерисовке Canvas


1-1162441631
Tex
2006-11-02 07:27
2006.12.17
Подсвечивание заголовков в PageCotrol


9-1140174587
Древолаз
2006-02-17 14:09
2006.12.17
Ошибка GLOxOde, ODEGL, ODEImport


2-1164619364
TIF
2006-11-27 12:22
2006.12.17
Помогите!!! Двоичное - в обычное