Главная страница
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.028 c
2-1164978170
.ruslan
2006-12-01 16:02
2006.12.17
PageScroller убрать кнопки прокрутки и использовать колёсик мыши


6-1153732700
Kacnep
2006-07-24 13:18
2006.12.17
Корректно и абсолютно закрыть ИНДИ сервер


2-1164983329
vitv
2006-12-01 17:28
2006.12.17
DISTINCT + DBLookupComboBox


11-1140602947
Zhilkin Serg
2006-02-22 13:09
2006.12.17
RadioGroup в KOL/МСК


15-1164357192
vitv
2006-11-24 11:33
2006.12.17
VIA KT266A-вопрос.