Empezando con ADO
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Empezando con ADO
Rick,
I am using ADO (Jet) and Access for several tests.
Thanks for the URL to update Jet, I will try it on such laptop
I am using ADO (Jet) and Access for several tests.
Thanks for the URL to update Jet, I will try it on such laptop
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Empezando con ADO
Cristobal,
Now that you know how to create and open an Access table .. you can easily convert .dbf to .mdb
Rick Lipkin
Now that you know how to create and open an Access table .. you can easily convert .dbf to .mdb
Rick Lipkin
Code: Select all
oRs := TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := 1 // opendkeyset
oRs:CursorLocation := 3 // local cache
oRs:LockType := 3 // lockoportunistic
// check for very first user
cSQL := "SELECT * FROM USERINFO"
TRY
oRs:Open( cSQL, xCONNECT ) // you can use the FW_function Antonio mentioned above as well
CATCH 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 TRY
cLOGIN := UPPER( WNetGetuser() )+space(25) // fivewin
cLOGIN := 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 Databases
Endif
Re: Empezando con ADO
Mr. Rick
This is also a breakthrough for me
As I believe the indices from the. Ntx present some example?
thanks
Esto tambien es un gran avance para mi
Como creo los indices a partir de los .Ntx actuales, algun ejemplo?
Gracias
This is also a breakthrough for me
As I believe the indices from the. Ntx present some example?
thanks
Esto tambien es un gran avance para mi
Como creo los indices a partir de los .Ntx actuales, algun ejemplo?
Gracias
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Empezando con ADO
Cristobal,
The index on the .dbf is irrelevant .. you can just open the database in natural order and use the above code to migrate the data to your Sql table. Be sure that you have Set Deleted On so you won't process any deleted .dbf records... or you can put an if deleted() statement
Rick Lipkin
The index on the .dbf is irrelevant .. you can just open the database in natural order and use the above code to migrate the data to your Sql table. Be sure that you have Set Deleted On so you won't process any deleted .dbf records... or you can put an if deleted() statement
Code: Select all
Select Userinfo
Go top
DO while .not eof
If deleted()
select Userinfo
skip
loop
endif
... recordset code migration as above
...
select userinfo
skip
EndDo
Re: Empezando con ADO
Mr. Rick
Cuando he creado la base de datos .mdb, ¿cómo creo los ficheros indices de la nueva base de datos?
Mr. Rick
When I created the database. MDB, how do I create indexes files of the new database?
Cuando he creado la base de datos .mdb, ¿cómo creo los ficheros indices de la nueva base de datos?
Mr. Rick
When I created the database. MDB, how do I create indexes files of the new database?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Empezando con ADO
Cristobal,
Indexes in Sql and Indexes using .dbf are totally different. I do not use any indexing with Ms Access ( not available in ms sql server ) .. when you write Sql statements you craft the script to fetch a certain set of rows based on your Select statement...( filters as well ) and SORT with the Order By clause.
Lets say you want to fetch a set of rows from a Customer table just for the State of South Carolina or 'SC' ..
Sql is a different mindset than .dbf .. but once you understand the principals .. it is an easy transition. A post Script .. I use the brackets[] to delineate tables and fields. For me it is just easier to read and you will find some Sql 'key words' that may cause some confusion in your script that may need to be surrounded with brackets to process correctly... especially if spaces are used in the table and or field names.
Rick Lipkin
Indexes in Sql and Indexes using .dbf are totally different. I do not use any indexing with Ms Access ( not available in ms sql server ) .. when you write Sql statements you craft the script to fetch a certain set of rows based on your Select statement...( filters as well ) and SORT with the Order By clause.
Lets say you want to fetch a set of rows from a Customer table just for the State of South Carolina or 'SC' ..
Code: Select all
cSql := "Select * from [Customer] where [State] = 'SC'"
or
cState := "SC"
cSql := "Select * from [Customer] where [State] = '"+cState+"'"
or with a filter condition .. sorted by
cState := "SC"
cSql := "Select * from [Customer] Order by [State],[City]"
oRs:Filter := "[State] = '"+cState+"'"
Rick Lipkin
Re: Empezando con ADO
Mr. Rick
Mi error es recordar cuando hace mucho tiempo usaba Access y despues mis comienzos con Mysql, que utilizaba "primary keys" y campos indices.
Mi agradecimiento por su tiempo y paciencia.
My mistake is to remember when used long ago and after my early Access to Mysql, which used "primary keys" fields and indexes.
My thanks for your time and patience.
Mi error es recordar cuando hace mucho tiempo usaba Access y despues mis comienzos con Mysql, que utilizaba "primary keys" y campos indices.
Mi agradecimiento por su tiempo y paciencia.
My mistake is to remember when used long ago and after my early Access to Mysql, which used "primary keys" fields and indexes.
My thanks for your time and patience.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Empezando con ADO
Dos preguntas:
- La function FW_CreateMdb, no la encuentra.
A partir de que version está incluida?
- Para cerrar la conexion es oCon:Close() ?
Two questions:
- The function FW_CreateMdb, not getting it.
From that version is included?
- To close the connection is oCon: Close ()?
A la primera contesto yo:
The first answer I:
- La function FW_CreateMdb, no la encuentra.
A partir de que version está incluida?
- Para cerrar la conexion es oCon:Close() ?
Two questions:
- The function FW_CreateMdb, not getting it.
From that version is included?
- To close the connection is oCon: Close ()?
A la primera contesto yo:
The first answer I:
No?FWH 13.05
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Empezando con ADO
Cristobal,
The Ado FW functions are only in the last few recent versions .. To CLose a connection it is oCn:Close().
Rick Lipkin
The Ado FW functions are only in the last few recent versions .. To CLose a connection it is oCn:Close().
Rick Lipkin
Re: Empezando con ADO
Rick,
He conseguido crear la base de datos
Ahora intentare crear las tablas.
Espero poder actualizarme a la nueva version pronto.
I managed to create the database
Now will try to create the tables.
I hope to upgrade to the new version soon.
Una pregunta:
One question:
is necessary because Jet.OLEDB use. 4.0 ?
He conseguido crear la base de datos
Ahora intentare crear las tablas.
Espero poder actualizarme a la nueva version pronto.
I managed to create the database
Now will try to create the tables.
I hope to upgrade to the new version soon.
Code: Select all
Function UsarAcces()
Local oCon
Local 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
One question:
es necesario porque uso Jet.OLEDB.4.0 ?Jet OLEDB:Engine Type = 5
is necessary because Jet.OLEDB use. 4.0 ?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Empezando con ADO
Cristobal,
From the Microsoft Website ...
http://msdn.microsoft.com/en-us/library ... 10%29.aspx
Rick Lipkin
From the Microsoft Website ...
http://msdn.microsoft.com/en-us/library ... 10%29.aspx
Rick Lipkin
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
Re: Empezando con ADO
Rick, gracias
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Empezando con ADO
[ESPAÑOL]
Buenas noches
Ya he avanzado un poco en el tema, pero no se como solucionar los siguientes temas:
He conseguido llegar a poder seleccionar y abrir una Tabla:
2.- ¿Cómo puedo cerrar la tabla sin tener que cerrar la conexion?
3.- Estoy investigando cual es el comando ADO que realiza la funcion AdoOpenTable ( dónde encuentro su código? )
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?
5.- Cuáles son los tipos de campos más habituales para su importación de DBF ?, ya que he estado leyendo y hay muchos tipos de campos en ACCESS
Disculpen tantas preguntas
Adjunto una imagen de mis "progresos"
[ENGLISH]
Good night
I've made a little progress on the issue, but not how to solve the following topics:
I managed to get to be able to select and open a table:
2. - How I can close the table without having to close the connection?
3. - I'm investigating what ADO command that performs this function AdoOpenTable (where I find your code?)
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?
5. - What are the most common field types for import of DBF?, Since I've been reading and there are many types of fields in ACCESS
Sorry for so many questions
Attached is a picture of my "progress"
Buenas noches
Ya he avanzado un poco en el tema, pero no se como solucionar los siguientes temas:
He conseguido llegar a poder seleccionar y abrir una Tabla:
1.- Lo he hecho con .Schema(20), hay otra forma?, puede servir ADOX.Table?oMdbTable := AdoOpenTable( oCon, cTblMdb )
2.- ¿Cómo puedo cerrar la tabla sin tener que cerrar la conexion?
3.- Estoy investigando cual es el comando ADO que realiza la funcion AdoOpenTable ( dónde encuentro su código? )
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?
5.- Cuáles son los tipos de campos más habituales para su importación de DBF ?, ya que he estado leyendo y hay muchos tipos de campos en ACCESS
Disculpen tantas preguntas
Adjunto una imagen de mis "progresos"
[ENGLISH]
Good night
I've made a little progress on the issue, but not how to solve the following topics:
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?oMdbTable: = AdoOpenTable (oCon, cTblMdb)
2. - How I can close the table without having to close the connection?
3. - I'm investigating what ADO command that performs this function AdoOpenTable (where I find your code?)
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?
5. - What are the most common field types for import of DBF?, Since I've been reading and there are many types of fields in ACCESS
Sorry for so many questions
Attached is a picture of my "progress"
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Empezando con ADO
Bueno, he podido resolver algunas de las dudas que tenia:
http://forums.fivetechsupport.com/viewt ... ble#p58854
( Gracias Enrico )
Pero, no sé cómo saber el tipo de campo, longitud, decimales, etc
Cuando pongo por ejemplo:
Qué significa el 130 ?
ENGLISH
Well, I could answer some of the questions I had:
http://forums.fivetechsupport.com/viewt ... ble#p58854
But I do not know how to know the field type, length, decimals, etc.
When I put for example:
What 130?
Si, en este post se desarrolla como ver las tablas y la estructura de una tabla ( pero solo el nombre del campo )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
cTabla := oCat:Tables( i ):Name
cTipo := oCat:Tables( i ):Type
( Gracias Enrico )
Pero, no sé cómo saber el tipo de campo, longitud, decimales, etc
Cuando pongo por ejemplo:
Code: Select all
? oCat:Tables( i ):Columns( j ):Name // Devuelve bien el nombre del campo
? oCat:Tables( i ):Columns( j ):Type // Devuelve siempre 130 ¿?
ENGLISH
Well, I could answer some of the questions I had:
If, in this post develops as view tables and the structure of a table (but only the field name)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
cTabla := oCat:Tables(i):Name
cType := oCat:Tables(i):Type
But I do not know how to know the field type, length, decimals, etc.
When I put for example:
Code: Select all
? oCat:Tables(i):Columns(j):Name / / Returns either the field name
? oCat:Tables(i):Columns(j):Type / / Returns always 130?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Empezando con ADO
Un poco mas de luzQué significa el 130 ?
Listado de codigos de tipo de campo
A little more light
List of field type codes
Code: Select all
#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
But not even its equivalence with the usual fields used in DBF: long, decimals
http://www.w3schools.com/ado/ado_datatypes.asp
Donde puedo buscar mejor informacion?
Where I can find better information?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.