12.10.2007, 16:31 | #1 |
Участник
|
Индекс не найден
Значит такая ситуация работаю я с ODBC. Перекидываю из файла *.dbf данные в Навиш....на
своем компьютере все сделал...и все работает...но стоит мне перекинуть кому нибудь свою базу, на другую машину он выдает ошибку: Вызов функции open неудачен. Microsoft JET Database Engine вернул следующие сообщение: Индекс не найден. Не потскажете в чем может быть причина???? Скину на всякий случай сам код: Setup.GET; Setup.CALCFIELDS(File); IF Setup.File.HASVALUE THEN BEGIN Path:=ENVIRON('TMP') + '\'; DBFFile:=Setup."File Name"; MESSAGE('setup.file = %1', DBFFile); END; IF DBFFile = '' THEN ERROR(Text001); IF NOT ISCLEAR(Connection) THEN CLEAR(Connection); CREATE(Connection); ConnStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=' + Path + ';Extended Properties=DBASE 5.0;'; Connection.Open(ConnStr); IF ISCLEAR(RecSet) THEN CREATE(RecSet); RecSet.Open('select * from ' + DBFFile + ' where DATA >= # ' + FORMAT(DateFrom,0,'<Month,2>-<Day,2>-<Year4>') + '# and DATA <= #' + FORMAT(DateTo,0,'<Month,2>-<Day,2>-<Year4>') + '#',Connection); RecSet.MoveFirst; //Выбор Типа документа IF Setup."Document Type" = Doc::Оплата THEN Setup."Document Type":=1 ELSE Setup."Document Type":=6; // Выбор Типа счета IF Setup."Account Type" = Acc::Клиент THEN Setup."Account Type":=1 ELSE IF Setup."Account Type" = Acc::Поставщик THEN Setup."Account Type":=2 ELSE Setup."Account Type":=3; // Выбор Вида платежа IF Setup."King Payment" = Pay::Почтой THEN Setup."King Payment":=1 ELSE IF Setup."King Payment" = Pay::Телеграфом THEN Setup."King Payment":=2 ELSE Setup."King Payment":=5; WHILE NOT RecSet.EOF DO BEGIN CLEAR( GenJournalLine ) ; CLEAR( Vendor); //Ввод данных в таблицу GenJournalLine."Journal Template Name" := Setup."Pattern Name"; // Имя шаблона Журнала GenJournalLine."Account Type" := Setup."Account Type"; // Тип Счета GenJournalLine."Document Type" := Setup."Document Type"; // Тип документа GenJournalLine."Document No." := FORMAT(RecSet.Fields.Item('NOM').Value); //Документ Но. // разделение строки на 3(поле Text1,2,3)... Name := FORMAT(RecSet.Fields.Item('NAME1').Value); GenJournalLine."Text 1" := DELCHR( PADSTR( Name, 80 ), '<>',' '); Name := DELSTR( Name, 1, 80); GenJournalLine."Text 2" := DELCHR( PADSTR( Name, 80 ), '<>',' '); Name := DELSTR( Name, 1, 80); GenJournalLine."Text 3" := DELCHR( PADSTR( Name, 80 ), '<>',' '); GenJournalLine."Bal. Account No." := BankAccountNo; GenJournalLine."Bill-to/Pay-to No." := GenJournalLine."Account No."; // Преобразование текста в дату! ValuePostingDate:= FORMAT(RecSet.Fields.Item('DATA').Value); Ok1 := EVALUATE(VarDatePostingDate, ValuePostingDate); GenJournalLine."Posting Date":= VarDatePostingDate; GenJournalLine."Due Date" := GenJournalLine."Posting Date"; //Преобразование текста в Decimal ValueAmount:= FORMAT(RecSet.Fields.Item('SUM').Value); Ok2 := EVALUATE(VarDecimalAmount, ValueAmount); GenJournalLine.Amount:=VarDecimalAmount; // Геренератор значения в поле Строка Но. Auto:=0; IF Auto = 0 THEN BEGIN GenJournalLineGen.SETCURRENTKEY("Line No."); GenJournalLineGen.FIND('+'); Auto:=GenJournalLineGen."Line No." +1; GenJournalLineGen.NEXT; IF GenJournalLineGen.FIND('+') THEN REPEAT UNTIL GenJournalLineGen.NEXT = 0; IF GenJournalLineGen."Line No." = 0 THEN Auto:=1; END; GenJournalLine."Line No." := Auto; GenJournalLine."Journal Batch Name" := Setup."Section Code"; GenJournalLine."Document Date" := GenJournalLine."Posting Date"; GenJournalLine."External Document No." := GenJournalLine."Document No."; GenJournalLine."Payment Method" := Setup."King Payment"; GenJournalLine."Payment Subsequence" := FORMAT(RecSet.Fields.Item('OCHER').Value); //Определение счет номера TextKPP := FORMAT(RecSet.Fields.Item('KPP2').ActualSize); IF TextKPP > '0' THEN KPP:=FORMAT(RecSet.Fields.Item('KPP2').Value) ELSE KPP:=''; Vendor.SETCURRENTKEY( "VAT Registration No." ) ; Vendor.SETFILTER( "VAT Registration No.", FORMAT(RecSet.Fields.Item('KOD2_BUYM').Value ) ); Vendor.SETFILTER( "KPP Code", COPYSTR(KPP, 1,MAXSTRLEN(Vendor."KPP Code" ) ) ) ; IF Vendor.FIND('-') THEN BEGIN GenJournalLine."Account No." := Vendor."No."; GenJournalLine."VAT Registration No." := Vendor."VAT Registration No."; // ИНН END; GenJournalLine."Bill-to/Pay-to No." := GenJournalLine."Account No."; GenJournalLine."VAT Registration No." := Vendor."VAT Registration No."; //Определение Получатель кода Банка! // KOR2 - BILL_KOR2 IF FORMAT(RecSet.Fields.Item('BILL_KOR2').ActualSize) >'0' THEN KOR2:= FORMAT(RecSet.Fields.Item('BILL_KOR2').Value) ELSE KOR2:=''; VendorBankAccount.SETFILTER( "Vendor No.", GenJournalLine."Account No." ); VendorBankAccount.SETFILTER( BIC, FORMAT(RecSet.Fields.Item('KOD_KOR1').Value)); VendorBankAccount.SETFILTER( "Bank Branch No.",FORMAT(RecSet.Fields.Item('BILL_KOR1').Value)); VendorBankAccount.SETFILTER( "Bank Account No.",KOR2 ); IF(VendorBankAccount.FIND( '-' )) THEN GenJournalLine."Beneficiary Bank Code" := VendorBankAccount.Code; //Примен. Тип Документа IF COPYSTR(FORMAT(RecSet.Fields.Item('NAME1').Value), 1, 15) = 'Оплата по счету' THEN BEGIN AppDocType:=COPYSTR(FORMAT(RecSet.Fields.Item('NAME1').Value), 1, 50); GenJournalLine."Applies-to Doc. Type":=2; Pos1 := STRPOS(AppDocType, 'от'); Pos2 := STRPOS(AppDocType, '№'); Pos3 := STRPOS(AppDocType, 'за'); Name1_Date:=COPYSTR(AppDocType,Pos1+2,(Pos3-Pos1)-4); Name1_number:=COPYSTR(AppDocType,Pos2+1,(Pos1-Pos2)-1); Name2_Date:=COPYSTR(Name1_Date,1,11); //Примен.Документ Но VendorLedgerEntry.SETFILTER( "Vendor No.",GenJournalLine."Account No."); VendorLedgerEntry.SETFILTER("Document Date",Name2_Date); VendorLedgerEntry.SETFILTER("External Document No.",Name1_number); IF VendorLedgerEntry.FIND('-') THEN GenJournalLine."Applies-to Doc. No." :=VendorLedgerEntry."Vendor No."; END; GenJournalLine.INSERT; RecSet.MoveNext; END; RecSet.Close; Connection.Close; |
|
12.10.2007, 16:33 | #2 |
Участник
|
Скорей всего оишбка здесь:
ConnStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=' + Path + ';Extended Properties=DBASE 5.0;'; Connection.Open(ConnStr); IF ISCLEAR(RecSet) THEN CREATE(RecSet); RecSet.Open('select * from ' + DBFFile + ' where DATA >= # ' + FORMAT(DateFrom,0,'<Month,2>-<Day,2>-<Year4>') + '# and DATA <= #' + FORMAT(DateTo,0,'<Month,2>-<Day,2>-<Year4>') + '#',Connection); RecSet.MoveFirst; Но факт в том, что у меня работает, а у других нет! |
|
15.10.2007, 05:16 | #3 |
Участник
|
На каком Open происходит ошибка, при открытии соединения или запроса?
Возможно, дело в несоответствии региональных установок. Посмотрите также есть ли разница в настройках ODBC. |
|
15.10.2007, 07:51 | #4 |
Участник
|
Поманипулировав кодом, пришел к мнению, что ошибка вызываеться имено в запросе, а не в соединении
|
|
15.10.2007, 09:54 | #5 |
Участник
|
В настройках ODBC:
User DSN: Microsoft Access Driver(*.mdb) Microsoft dBase Driver(*.dbf) Microsoft Excel Driver(*.xls) System DSN: Pervasive ODBC Engine Interface SQL Server Driver do Microsoft Excel(*.xls) |
|
15.10.2007, 10:28 | #6 |
Участник
|
удалил для проверки все драйвера из User, System DSN....и все равно у меня работает, не смотря на это...
|
|
16.10.2007, 14:53 | #7 |
Участник
|
Все спасибо...проблема решилась.
Вся проблема, как раз была из за файла *.dbf. |
|