Главная страница
    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.5 MB
Время: 0.059 c
15-1164614272
boriskb
2006-11-27 10:57
2006.12.17
История


5-1145023755
SMAC
2006-04-14 18:09
2006.12.17
Binary component


2-1164653312
kilonet
2006-11-27 21:48
2006.12.17
Шифрование настроек программы


15-1164699123
Prohodil_Mimo
2006-11-28 10:32
2006.12.17
У кого установлен IE7, помогите


11-1140581535
LAutour
2006-02-22 07:12
2006.12.17
Возможно ли разместить KOLButton на KOLSplitter?





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