ADO AddNew

ADO AddNew

Postby Biel EA6DD » Thu Nov 23, 2006 11:43 am

Hola a todos.
Hace unas semanas he empezado a trabajar con ADO, tengo una duda (bueno tengo mas de una).
Estoy visualizando un recordset con un txbrowse, dicho recordset por su naturaleza no me permite ejecutar AddNew.

Cual seria la manera mas eficiente y comoda para realizar un alta.
1.- Ejecutar un insert con el metodo Execute del objeto connection.
2.- Lo mismo que antes pero con el objeto command
3.-Crear otro recordset con solo los campos de la tabla en cuestion y me permita hacer AddNew. Esta segunda parece mas comoda, pero que source le pongo, si realmente no me interesa me recupere ningun registro¿?. O puedo poner el cursor en el lado del cliente y asi no descarga registros ?¿ o ...?¿
4.- ...

Please opiniones de los expertos, gracias anticipadas.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Rochinha » Thu Nov 23, 2006 8:20 pm

HOla

Mira:

Inserir registro:

Code: Select all  Expand view
    oRs:AddNew()
    oRs:Fields( "id" ):Value         := "00001"
    oRs:Fields( "nombre" ):Value := "JOSE CARLOS DA ROCHA"
    oRs:Fields( "apelido" ):Value  := "ROCHINHA"
    oRs:Fields( "pais" ):Value       := "BRASIL"
    oRs:Update() // Actualiza o recordset


Alterar registro:

Code: Select all  Expand view
    oRs:Fields( "id" ):Value         := "00001"
    oRs:Fields( "nombre" ):Value := "JOSE CARLOS DA ROCHA"
    oRs:Fields( "apelido" ):Value  := "ROCHINHA"
    oRs:Fields( "pais" ):Value       := "BRASIL"
    oRs:Update() // Actualiza o recordset


Borrar registro:

Code: Select all  Expand view
    oRs:Delete()
    oRs:ReQuery() // opcional


Ok?
Rochinha
 
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby Biel EA6DD » Fri Nov 24, 2006 8:23 am

Gracias Rochinha, pero eso no es exactamente lo que estaba preguntando. Yo ya conozco los metodos para altas bajas y modificaciones. El problema es que el browse esta basado sobre un recordset (oRS) no editable. Y la pregunta, es cual seria el metodo mas rapido para dar el alta. Otro recordset que permita addnew, inser con execute, ...
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Rochinha » Fri Nov 24, 2006 2:06 pm

Amigo

Lo recordset esta basado en que tipo de BD?

Yo trabajo en modo local, cliente.

Revisa se la abertura es ReadOnly

Code: Select all  Expand view
LOCAL oConn := TOLEAUTO():New("adodb.connection")
PRIVATE oRecordset := TOLEAUTO():New("adodb.recordset")

   oConn:Open("Provider= MicroSoft.Jet.OLEDB.4.0;Data Source=.\arquivo.mdb;")

   oRecordSet:LockType := adLockOptimistic // adLockReadOnly
   oRecordSet:CursorType := adOpenKeyset
   oRecordSet:ActiveConnection(oConn)
   oRecordSet:Source := "Select * from clientes" // tu query aqui
   oRecordSet:Open()
   oRecordSet:MoveFirst()

   aDatos := {}

   DO WHILE ! oRecordSet:eof()
        aReng := {}
        FOR x := 1 TO oRecordSet:Fields:Count()
            AADD(aReng,oRecordSet:Field(x-1):Value
        NEXT
        AADD(aDatos,aReng)
        oRecordSet:MoveNext
   ENDDO

   oRecordSet:Close()
   oConn:Close()


Saludos
Rochinha
 
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby Biel EA6DD » Fri Nov 24, 2006 3:00 pm

El recordset ataca una bases de datos DB2, y el source es
Code: Select all  Expand view
cSql:= "SELECT EmpCod,Anyo,NumPed,Fecha,Hora,Usr,NetName,Servir,CliCod,Obs1,Obs2,"+;
"Servido,Presu,Kilos,Ava3Tx,Ava4Tx,Ava6Tx,Ava7Tx,Ava8Tx,Ava9Tx,Avbatx,AvbCtx,AvbDtx"+;
" FROM (SELECT PedCab.EmpCod AS TotEmp, PedCab.Anyo as TotAny, PedCab.NumPed as TotNum,"+;
" SUM(UDS*PESO) AS KILOS FROM PEDCAB LEFT JOIN PEDDET ON PEDCAB.EMPCOD= PEDDET.EMPCOD AND"+;
" PEDCAB.ANYO=PEDDET.ANYO AND PEDCAB.NUMPED=PEDDET.NUMPED GROUP BY"+;
" PEDCAB.EMPCOD, PEDCAB.ANYO, PEDCAB.NUMPED) AS TOTAL, " +;
" PedCab LEFT JOIN PiCliep ON EmpCod=Avaccd AND CliCod=Ava4cd"+;
" WHERE PedCab.EmpCod=Total.TotEmp AND PedCab.Anyo=Total.TotAny AND PedCab.NumPed=Total.TotNum"


Este recordset no me perimite hacer AddNew(supongo que por el join , o por alguna otra cosa, no por el tipo de cursor, ni tipo de blouqeo), entonces debo utilizar otro recordset sobre la tabla base PedCab, o capturar los datos en variables y volcarlos con excute "insert ... ", y la pregunta cual es el metodo mejor.

PD. Los nombre de atributos son rarillos porque la tabla clientes fue creada con una herammienta Case que maneja diccionario de datos, y les pone estos nombres tan chulos y a la vez descriptivos :D (Ava3Tx,Ava4Tx,Ava6Tx...)
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Rochinha » Sat Nov 25, 2006 6:02 am

Si

Entonces debes usar INSERT pois con ele tu iras referenciar la tabla alvo mas directamente.
Rochinha
 
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 66 guests