Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];

Вниз

Ошибка: Поставщик данных ....... состояние E_FAIL   Найти похожие ветки 

 
oleg_veles   (2011-07-26 11:02) [0]

Добрый день ! Помогите разобраться с ошибкой:
Поставщик данных или другая служба вернули состояние E_FAIL.
Вылетает при выполнении следующего куска:
procedure TForm2.BitBtn2Click(Sender: TObject);
Var
Stroca: String;
Konec: String;
Nachalo: String;
Schet:String;
d: Integer;
r: Integer;
m:integer;
n:integer;
f:integer;
begin
    Begin
    //Определим количество записей в секции
    For i:=0 to Memo1.Lines.Count -1 do // Запускаем цикл поиска строки начала документа
    If Pos("СЕКЦИЯДОКУМЕНТ", Memo1.Lines[i])<>0 Then
       Begin
         m := i;
       End;
    For d:=0 to Memo1.Lines.Count -1 do // Запускаем цикл поиска строки конца документа
    If Pos("КОНЕЦДОКУМЕНТА", Memo1.Lines[d])<>0 Then
       Begin
         n := d;
       End;
    r := n-m;// Количество строк документа
    end;
    For i:=0 to Memo1.Lines.Count -1 do // Запускаем цикл поиска строки начала документа
    If Pos("СЕКЦИЯДОКУМЕНТ", Memo1.Lines[i])<>0
    Then
    Begin
      ADOTable1.Append;
      for f := 1 to r  do
        Begin
          rsh := Memo1.Lines[f + i];// Строка документа
          Stroca := Copy(rsh, 1, 6);
          Konec :=  Copy(rsh, 1, 14);
          Schet :=  Copy(rsh, 1, 13);
          Znach := Copy(rsh,Pos("=",rsh)+1, Length(Rsh));
          if Znach = "" then Znach := "0";
          ADOTable1.Edit;
          If (Stroca = "ДАТАСП") OR (Stroca = "ДАТАПО") OR (Stroca = "ДАТАОП") Then Begin
                   ADOTable1Data.Value := Znach
                   end
                   Else
          If (Stroca = "СУММА=") OR (Stroca = "СУММАП") OR (Stroca = "СУММАР") Then Begin
                   ADOTable1Summa.Value := Znach
                   end
                   Else
          If (Schet = "ПЛАТЕЛЬЩИКСЧЕ") OR (Schet = "ПЛАТЕЛЬЩИКИИК") OR (Schet = "ПЛАТЕЛЬЩИК2  ") Then Begin
                   ADOTable1PlatSchet.Value := Znach
                   end
                   Else
          If Stroca = "НАЗНАЧ" Then Begin
                   ADOTable1NaznPlat.Value := Znach;
          ADOTable1Bank.Value := Nomer;
          If Konec = "КОНЕЦДОКУМЕНТА" Then End;
       End;
          ADOTable1.Post;
    End;
    ADOTable1.Active := False;
    Memo1.CharCase := ecNormal;
    ADOTable1.Active := True;
end;

Вылетает непонятно в каком месте и не зависит (проверял) от загружаемого файла, т.е. может два раза файл загрузиться, а третий (пятый, двадцатый) появится эта ошибка. Харанее благодарен за ответ...


 
SQLEXPRESS   (2011-07-26 11:19) [1]

Access?


 
Dennis I. Komarov ©   (2011-07-26 11:30) [2]

Ужасть, а не код.
1. циклы for заменить на один while
2. Учить SQL
3. Судя по присутствующим терминам "ПЛАТЕЛЬЩИК", "СУММА" и т.п. автора придать анафеме


 
oleg_veles   (2011-07-26 11:31) [3]

Он проклятый :-( , но уйти ни как... там древняя программуля обрабатывает полученные данные. Мне только и надо из декста в mdb перегнать...


 
И. Павел ©   (2011-07-26 11:34) [4]

> Вылетает непонятно в каком месте

Даже после трассирования непонятно?


 
oleg_veles   (2011-07-26 11:35) [5]

To Dennis I. Komarov

> 2. Учить SQL

Где тут SQL !

> 3. Судя по присутствующим терминам "ПЛАТЕЛЬЩИК", "СУММА"
> и т.п. автора придать анафеме

И за что ? За то что вынужден выполнять прихоть бухов? Ты видно счастливый делаешь только то что хочешь...
А по существу вопроса можешь что подсказать ?


 
oleg_veles   (2011-07-26 11:36) [6]


> Даже после трассирования непонятно?


      End;
  >>>       ADOTable1.Post;
   End;


 
Anatoly Podgoretsky ©   (2011-07-26 11:39) [7]

> oleg_veles  (26.07.2011 11:02:00)  [0]

TAdoDataset


 
oleg_veles   (2011-07-26 11:40) [8]


> Даже после трассирования непонятно?

Но это ни о чём... может вылететь в ошибку, а может и нет... связи не нахожу...


 
oleg_veles   (2011-07-26 11:49) [9]


> Anatoly Podgoretsky

А как мне тут TAdoDataset поможет ? Если бы надо было работать с готовым набором данных то я и использовал бы тот же SQL. А тут выписки банковские, при чем документы содержат произвольное число строк. Да и поля текстовые сами видете по IF-ам минимум трех вариантов....


 
SQLEXPRESS   (2011-07-26 11:52) [10]

у меня что-то было такое, все переписал на
begintran
INSERT INTO (F1, F2) VALUES (:F1, :F2)
parameters.parambyname(F1).type :=
parambyname(F1).value :=
и т.п.
committran

чистую таблицу, файл, тестовый проектик посмотрит может кто


 
Dennis I. Komarov ©   (2011-07-26 11:52) [11]


> Где тут SQL !

Вот нету, а быть должен.

> И за что ? За то что вынужден выполнять прихоть бухов?

За написание такого кода в приложении, используемого в коммерческих целях

> А по существу вопроса можешь что подсказать ?

Читай [1] и [7] до полного просветления


 
Dennis I. Komarov ©   (2011-07-26 11:54) [12]

т.е. [2] и [7]


 
И. Павел ©   (2011-07-26 11:57) [13]

> [9] oleg_veles   (26.07.11 11:49)

Посмотрите - если у вас MDAC ниже версии 2.6 то может быть ошибка связана с багом Микрософта. Тогда просто обновите MDAC.

Хотя тут, конечно, нужно все переписать через ADODataSet.


 
sniknik ©   (2011-07-26 11:59) [14]

> автора придать анафеме
придать, но за ADOTable1, ламеризм, и не использование параметризованных запросов.

Znach := Copy(rsh,Pos("=",rsh)+1, Length(Rsh));
if Znach = "" then Znach := "0";

например
Znach := "####.##";
???

> а может и нет... связи не нахожу...
запись разных данных. в смысле правильных и не правильных.


 
oleg_veles   (2011-07-26 12:00) [15]


> И. Павел



> Хотя тут, конечно, нужно все переписать через ADODataSet.

Спасибо, буду пробовать...


 
sniknik ©   (2011-07-26 12:00) [16]

> Хотя тут, конечно, нужно все переписать через ADODataSet.
на ADOCommand, тут нет отображения/работы с рекордсетом, тут только запись в таблицу.


 
Плохиш ©   (2011-07-26 12:06) [17]

Это правильно. Сначала высосать ... пардон ... создать проблему, а затем е&#235; героически решать...
Только не понятно, ч&#235; они сюда прутся, здесь же не решают высосанных проблем?


 
oleg_veles   (2011-07-26 12:06) [18]

Всем спасибо... Буду пробовать...
Для критикующих - форум называется: "Начинающим".
"Все проходит - и это пройдет"
                             (Надпись на пестне Соломона)


 
Dennis I. Komarov ©   (2011-07-26 12:10) [19]


> oleg_veles   (26.07.11 12:06) [18]

Начинающим, надо учиться, а не лезть решать задачи бухгалтеров. Ничего личного, просто задолбали такие горе-программисты, после которых...


 
SQLEXPRESS   (2011-07-26 13:01) [20]

попробуйте еще обернуть в

try

 except
   on E:Exception do
   begin
     for i := 0 to ac1.Errors.Count - 1 do
      mmo1.Lines.Add(ac1.Errors.Item[i].Source + ac1.Errors.Item[i].Description);
     raise;
   end;
 end

mmo1 - Tmemo
ac1 - TAdoConnection

ничего нового не читается?


 
Игорь Шевченко ©   (2011-07-26 13:59) [21]


>    on E:Exception do


при EAccessViolation будет масса полезной информации.

"Только массовые расстрелы спасут отечество"


 
SQLEXPRESS   (2011-07-26 14:12) [22]

а что не так?

 M: TADOCommand;
begin
 try
   M.Execute; // AV
 except
   on E:Exception do
   begin
     for i := 0 to ac1.Errors.Count - 1 do // ошибок не найдено
      mmo1.Lines.Add(ac1.Errors.Item[i].Source + ac1.Errors.Item[i].Description);
     raise; // ловите AV выше
   end;
 end


 
Игорь Шевченко ©   (2011-07-26 14:29) [23]


> а что не так?


а то, что заполнять имеет смысл только при том типе исключения, когда в ac1.Errors гарантировано содержится актуальная информация.


 
skiph ©   (2011-09-15 11:44) [24]

Подобная проблема связана с тем, что в исходных данных содержатся значения данных NULL либо дата и/или время в значении "0000-00-00"/"00:00:00"


 
skiph ©   (2011-09-15 12:05) [25]

По поводу NULL уточню: Ошибка возникает, когда NULL содержится в поле, которое не может быть NULL-евым. Объясню, как такое возможно.
Предположим, что у нас есть 2 таблицы: Основная Т1 и справочник Т2 (имеет поля key и mainfield) и мы хотим выполнить запрос вида
SELECT *
FROM T1 LEFT OUTER JOIN T2 ON T1.key=T2.key

Ясное дело, что при таком соединении в результирующей таблице не все поля T2.key и Mainfield будут иметь значение (они будут равны NULL), однако в описании таблицы T2, скорее всего, они будут обязательными


 
Anatoly Podgoretsky ©   (2011-09-15 13:46) [26]

> skiph  (15.09.2011 12:05:25)  [25]

Чудеса, но попробуй поставить другой сервер, это налицо непригодный.


 
Inovet ©   (2011-09-15 14:34) [27]

> [25] skiph ©   (15.09.11 12:05)
> е все поля T2.key и Mainfield будут иметь значение (они будут равны NULL),

А такой запрос
SELECT * FROM T1 WHERE key IS NULL
И такой
SELECT * FROM T2 WHERE key IS NULL
что вернут?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.003 c
15-1315555359
OW
2011-09-09 12:02
2011.12.25
Вопрос по EurekaLog. Исходный код включить можно?


4-1253095828
roughneck
2009-09-16 14:10
2011.12.25
Перехват WM_QUERYENDSESSION


15-1315340989
Юрий
2011-09-07 00:29
2011.12.25
С днем рождения ! 7 сентября 2011 среда


8-1208441706
doKi
2008-04-17 18:15
2011.12.25
лицевая анимация


2-1316076960
pk
2011-09-15 12:56
2011.12.25
TpFibDataSet передать значение параметру





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