You can check my code that I used for importing data from FoxPro. Tabele is a NAV table containig all tables in FoxPro, TableField (also NAV table) contains all fields in tables.
I used that for one-click-import of all data and then processed into batch(es).
Code has been changed but you'll see, how to use ADO
Name DataType Subtype Length
ADOrs Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Recordset
ImportData()
ConnStr := 'Driver={Microsoft Visual Foxpro Driver};UID=;SourceType=DBF;SourceDB=c:\\MIT\\VSI;Exclusive=No' ;
DefSetting(ConnStr) ;
//RetrTables ;
//RetrFields ;
CLEAR(ADOrs) ;
CREATE(ADOrs) ;
Tabele.SETFILTER(Tabele."Tabela MSB",'<>0') ;
Tabele.FIND('-') ;
TableField.SETFILTER(TableField."Field NA",'<>0') ;
TableField.SETRANGE(TableField."Tabela NA",Tabele."Tabela MSB") ;
TableField.FIND('-') ;
ConnQ := 'select ' ;
REPEAT
ConnQ := ConnQ+TableField."Polje MIT"+',' ; //'select pogodba,sifrk,datv,rabat100 from '+Tabele."Tabela MIT" ;
UNTIL TableField.NEXT = 0 ;
ConnQ := COPYSTR(ConnQ,1,STRLEN(ConnQ)-1) ;
ConnQ := ConnQ+' from '+Tabele."Tabela MIT" ;
ADOrs.Open(ConnQ,ADOConn) ;
NoRec := 0 ;
ADOrs.MoveFirst ;
REPEAT
NoRec += 1 ;
IF NOT ADOrs.EOF THEN ADOrs.MoveNext ;
UNTIL ADOrs.EOF ;
ADOrs.MoveFirst ;
CurrRecord := 1 ;
Progress := ROUND(CurrRecord/NoRec*10000,1) ;
Okno.OPEN('Tabela: #1########################\Polje: #3#'+
'############\Progress: @2@@@@@@@@@@@@@@@@@@@@@@@@',Tabele."Tabela MIT",Progress,
TableField."Field NA") ;
TableField.FIND('-') ;
RecRef.OPEN(TableField."Tabela NA") ;
REPEAT
TableField.FIND('-') ;
REPEAT
ImportValue(TableField."Tabela NA",TableField."Field NA",FORMAT(ADOrs.Fields.Item(TableField."Polje MIT").Value)) ;
UNTIL TableField.NEXT = 0 ;
IF NOT RecRef.INSERT THEN RecRef.MODIFY ;
CurrRecord += 1 ;
IF NOT ADOrs.EOF THEN ADOrs.MoveNext ;
Progress := ROUND(CurrRecord/NoRec*10000,1) ;
Window.UPDATE ;
//until currrecord = 5 ;
UNTIL ADOrs.EOF ;
Window.CLOSE ;
And function for formatting data referencing field type in NAV
ImportValue(Table : Integer;Field : Integer;value : Text[1024])
value := DELCHR(value,'>',' ') ;
FldRef := RecRef.FIELD(Field);
Len := FldRef.LENGTH;
Type := FORMAT(FldRef.TYPE) ;
IF (STRLEN(value) = 6) AND (FldRef.LENGTH=4) THEN
EVALUATE(FldRef,value) //this is for date fields (I think so...)
ELSE
BEGIN
value := COPYSTR(value,1,FldRef.LENGTH) ;
EVALUATE(FldRef,value) ;
END ;
EVALUATE(FldRef,value) ;
Funny, I managed to do this without ADO even in 2004 on trialup for our Navision 3.7
A few dataports, french ^ delimiter use and a few very small VFP applications. Was whole data migration.
Comments
Check this for help: http://www.mibuso.com/forum/viewtopic.php?t=23038
No PM,please use the forum. || May the <SOLVED>-attribute be in your title!
I used that for one-click-import of all data and then processed into batch(es).
Code has been changed but you'll see, how to use ADO
And function for formatting data referencing field type in NAV
A few dataports, french ^ delimiter use and a few very small VFP applications. Was whole data migration.