Главная страница
    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.052 c
15-1164598280
Slider007
2006-11-27 06:31
2006.12.17
С днем рождения ! 27 ноября


3-1160462245
Tornado
2006-10-10 10:37
2006.12.17
Вычисляемое поле ADOQuery


2-1164519166
APiC
2006-11-26 08:32
2006.12.17
CreateThread


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


15-1164569116
Piter
2006-11-26 22:25
2006.12.17
Забавный глюк миранды





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский