Форум: "Начинающим";
Текущий архив: 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]Это правильно. Сначала высосать ... пардон ... создать проблему, а затем еë героически решать...
Только не понятно, чë они сюда прутся, здесь же не решают высосанных проблем?
← →
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