I am using ADO (Jet) and Access for several tests.
Thanks for the URL to update Jet, I will try it on such laptop

Code: Select all | Expand
oRs := TOleAuto():New( "ADODB.Recordset" )oRs:CursorType := 1 // opendkeysetoRs:CursorLocation := 3 // local cacheoRs:LockType := 3 // lockoportunistic // check for very first usercSQL := "SELECT * FROM USERINFO"TRY oRs:Open( cSQL, xCONNECT ) // you can use the FW_function Antonio mentioned above as wellCATCH oErr Saying := "Error in Opening USERINFO table to"+chr(10) Saying += "Create the First Admin User"+chr(10) MsgInfo( Saying ) oCn:Close() oDlg:End() RETURN(.F.)END TRYcLOGIN := UPPER( WNetGetuser() )+space(25) // fivewincLOGIN := SUBSTR(cLOGIN,1,25)If file( cDefa+"\Userinfo.dbf" ) cSay := "Importing Legacy Users " oSay:ReFresh() Select 1 If NetUse( cDefa+"\Userinfo.Dbf",.t.,5) Set Order to tag Userid Else oCn:Close() oDlg:End() Return(.f.) Endif nEid := 1 Select UserInfo Go Top Do While .not. Eof() cSay := "Importing Legacy Users "+UserInfo->UserId oSay:ReFresh() SysReFresh() If Userinfo->UserId = " " Select UserInfo Skip Loop Endif cEid := StrZero(nEid,18) oRs:AddNew() oRs:Fields("UserEid"):Value := cEid oRs:Fields("UserId"):Value := substr(UserInfo->UserId+space(25),1,25) oRs:Fields("Lname"):Value := substr(UserInfo->Lname+space(15),1,15) oRs:Fields("Fname"):Value := substr(UserInfo->Fname+space(1),1,1) oRs:Fields("ReadOnly"):Value := if(UserInfo->Read = " ", "Y", UserInfo->Read) oRs:Fields("WriteOnly"):Value := if(UserInfo->Write = " ", "N", UserInfo->Write) oRs:Fields("Super"):Value := if(UserInfo->Super = " ", "N", UserInfo->Super) oRs:Fields("Admin"):Value := if(UserInfo->Admin = " ", "N", UserInfo->Admin) oRs:Fields("EntryBy"):Value := if(UserInfo->EntryBy = " ", "Import", UserInfo->EntryBy) oRs:Fields("EntryDate"):Value := if(UserInfo->EntryDate = ctod(""),; dtoc(Date())+" "+Time(),UserInfo->EntryDate ) oRs:Fields("LastLog"):Value := UserInfo->LastLog oRs:Fields("Password"):Value := Space(16) oRs:Fields("UpDated"):Value := if(UserInfo->Updated = 0, 1, UserInfo->Updated ) oRs:Update() nEid++ Select UserInfo Skip Enddo Close DatabasesEndif
Code: Select all | Expand
Select UserinfoGo topDO while .not eof If deleted() select Userinfo skip loop endif... recordset code migration as above... select userinfo skipEndDo
Code: Select all | Expand
cSql := "Select * from [Customer] where [State] = 'SC'"orcState := "SC"cSql := "Select * from [Customer] where [State] = '"+cState+"'"or with a filter condition .. sorted bycState := "SC"cSql := "Select * from [Customer] Order by [State],[City]"oRs:Filter := "[State] = '"+cState+"'"
FWH 13.05
Code: Select all | Expand
Function UsarAcces()Local oConLocal cBase := "archivo.mdb"Local oCatalog if ! File( cBase ) if MsgYesNo( cBase+" no encontrada" + CRLF + "Quieres crearla ?" ) oCatalog := CreateObject("ADOX.Catalog") oCatalog:Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type = 5 ;Data Source="+cBase) oCon = TOleAuto():New( "ADODB.Connection" ) oCon:Open( "Provider='Microsoft.Jet.OLEDB.4.0'; Data Source='archivo.mdb';" ) MsgInfo( "Cerrar" ) oCon:Close() endif else MsgInfo("La Base de datos EXISTE") // Abro la base de datos oCon = TOleAuto():New( "ADODB.Connection" ) oCon:Open( "Provider='Microsoft.Jet.OLEDB.4.0'; Data Source='archivo.mdb';" ) MsgInfo( "Cerrar" ) oCon:Close() endif
Jet OLEDB:Engine Type = 5
Jet OLEDB:Engine Type A Long value (read/write) that specifies which Jet database engine I-ISAM driver to use to access this database or file format. When you create a new database by using the Create method of the ADOX Catalog object, this can be used to specify the format for the new database. Once a database has been opened, this property can be read to determine what file version or format is open.
The Jet OLEDB:Engine Type property can be any of the following values:
Engine Type Setting
Unknown 0
Microsoft Jet 1.0 1
Microsoft Jet 1.1 2
Microsoft Jet 2.0 3
Microsoft Jet 3.x 4
Microsoft Jet 4.x 5
oMdbTable := AdoOpenTable( oCon, cTblMdb )
oMdbTable: = AdoOpenTable (oCon, cTblMdb)
He conseguido llegar a poder seleccionar y abrir una Tabla:
1.- Lo he hecho con .Schema(20), hay otra forma?, puede servir ADOX.Table?
4.- Cómo puedo saber la estructura de la tabla activa?
Creo que es con el ADODB.RecorSet y ejecutando una sentencia a través de ADODB.Command
pero eso es ya bastante complicado para mí. Hay otra forma?
Code: Select all | Expand
cTabla := oCat:Tables( i ):Name cTipo := oCat:Tables( i ):Type
Code: Select all | Expand
? oCat:Tables( i ):Columns( j ):Name // Devuelve bien el nombre del campo ? oCat:Tables( i ):Columns( j ):Type // Devuelve siempre 130 ¿?
I managed to get to be able to select and open a table:
1. - I've done it. Schema (20), there is another way?, Can serve ADOX.Table?
4. - How I can know the structure of the active table?
I think it's with ADODB.RecorSet and executing an ADODB.Command through
but it is already quite complicated for me. Is there another way?
Code: Select all | Expand
cTabla := oCat:Tables(i):Name cType := oCat:Tables(i):Type
Code: Select all | Expand
? oCat:Tables(i):Columns(j):Name / / Returns either the field name ? oCat:Tables(i):Columns(j):Type / / Returns always 130?
Qué significa el 130 ?
Code: Select all | Expand
#define adEmpty 0#define adTinyInt 16#define adSmallInt 2#define adInteger 3#define adBigInt 20#define adUnsignedTinyInt 17#define adUnsignedSmallInt 18#define adUnsignedInt 19#define adUnsignedBigInt 21#define adSingle 4#define adDouble 5#define adCurrency 6#define adDecimal 14#define adNumeric 131#define adBoolean 11#define adError 10#define adUserDefined 132#define adVariant 12#define adIDispatch 9#define adIUnknown 13#define adGUID 72#define adDate 7#define adDBDate 133#define adDBTime 134#define adDBTimeStamp 135#define adBSTR 8#define adChar 129#define adVarChar 200#define adLongVarChar 201#define adWChar 130#define adVarWChar 202#define adLongVarWChar 203#define adBinary 128#define adVarBinary 204#define adLongVarBinary 205#define adChapter 136#define adFileTime 64#define adPropVariant 138#define adVarNumeric 139#define adArray 8192