Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизКак отловить ошибку при добавлени в БД методом 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.052 c