![]() |
|
#1
|
|||
|
|||
![]() Всем доброго.
(В инете не нашел толкового решения только причину=(( ) При запросе выскакивает сообщение E_FAIL при просмотре 1 из записей dbf файла. Немного кода для наглядности=) Код:
//Строка подключения и провайдер (с этим проблем нет) .ConnectionString := 'Provider=VFPOLEDB.1;Data Source=d:\post2\;Mode=Read;User ID="admin";Password="";Mask Password=False;'+ 'Cache Authentication=False;Encrypt Password=False;Exclusive=True;DELETED=TRUE;'; //Сам запрос с проблемой sqltext :='Select '+ 'IIF(ISNULL(TYPEM),0,TYPEM) AS TYPE, '+ 'IIF(ISNULL(SVOD.NAME),0,SVOD.NAME) AS NAME, '+ 'IIF(ISNULL(CURMON),0,CURMON) AS CURMON, '+ 'IIF(ISNULL(WORKDAYS),0,WORKDAYS) AS WORKDAYS, '+ 'IIF(ISNULL(SVOD.CURSUM),0,SVOD.CURSUM) AS CURSUM, '+ 'IIF(ISNULL(FILTERF),0,FILTERF) AS FILTERF, '+ 'IIF(ISNULL(SVOD.CURSUM1),0,SVOD.CURSUM1) AS CURSUM1 '+ 'From "'+DBPAth+'SVOD.DBF" AS SVOD ' Код:
//Цикл перебора данных for i := 1 to rCount do begin pb1.Position := i; if ConvertOemToAnsi(ds1.DataSet.FieldByName('NAME').AsString) = '' then begin strngrdsvod.Cells[0,strngrdsvod.RowCount - 1] := ds1.DataSet.FieldByName('TYPEM').AsString; strngrdsvod.Cells[1,strngrdsvod.RowCount - 1] := ConvertOemToAnsi(ds1.DataSet.FieldByName('NM').AsString); strngrdsvod.Cells[2,strngrdsvod.RowCount - 1] := ds1.DataSet.FieldByName('WORKDAYS').AsString; strngrdsvod.Cells[3,strngrdsvod.RowCount - 1] := ds1.DataSet.FieldByName('CURSUM').AsString; strngrdsvod.Cells[4,strngrdsvod.RowCount - 1] := ds1.DataSet.FieldByName('CURSUM1').AsString; end else begin strngrdsvod.Cells[0,strngrdsvod.RowCount - 1] := ConvertOemToAnsi(ds1.DataSet.FieldByName('NAME').AsString); if ds1.DataSet.FieldByName('FILTERF').AsString = 'A' then strngrdsvod.Cells[1,strngrdsvod.RowCount - 1] := ds1.DataSet.FieldByName('CURSUM').AsString; end; strngrdsvod.RowCount := strngrdsvod.RowCount + 1; if i <> rCount then ds1.DataSet.FindNext; Application.ProcessMessages; end; Поля таблицы:svod |