Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
4-1155280631
ksa2002
2006-08-11 11:17
2006.12.17
Создание копии потока


9-1140506358
Древолаз
2006-02-21 10:19
2006.12.17
GLScene не найден Variants.dcu


15-1164598111
Slider007
2006-11-27 06:28
2006.12.17
С днем рождения ! 26 ноября


15-1164777571
sapsi
2006-11-29 08:19
2006.12.17
Работа в Яндекс


3-1160464542
Krants
2006-10-10 11:15
2006.12.17
ADOConnection, избавиться ошибки при не подключении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский