Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
[SOLUCIONADO] Affected Rows
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje [SOLUCIONADO] Affected Rows 
 
Buenas tardes a todos,
estoy con el desarrollo de una app para la gestión de proyectos (que espero no tardar mucho en compartir con todos) y tengo la siguiente duda.

Cómo puedo obtener un affected_rows o filas afectadas en el caso de un Insert?


Private iContador As Integer

 iContador = conn.Exec("INSERT INTO LOGS (FECHA,HORA,PANTALLA,MENSAJE) VALUES ('" & sFecha & "','" & sHora & "','" & sPantalla & "','" & sMensaje & "')")


la idea general es que si las rows afectadas es 1 registro iContador me debería devolver 1, y creo que -1 en caso de no tener el insert.

Igual no es la forma correcta de ejecutarlo, agradecería alguna visión aclaradora.

Saludos y gracias.
 



 
última edición por calcena el Jueves, 09 Agosto 2018, 14:25; editado 1 vez 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
Cuando en gambas utilizas Exec en una conexión, gambas pasa directamente la consulta a la BD. Si no utilizas los mecanismos de gambas para comunicarte con la BD, la respuesta te la debe dar la propia BD.

Fuera de eso, y teniendo en cuenta que nunca he usado affected_rows para nada, un miconexion.Exec("sentencia sql") siempre devuelve un objeto de tipo result.
Es decir que

Dim r as result

conn.Exec("INSERT INTO LOGS (FECHA,HORA,PANTALLA,MENSAJE) VALUES ('" & sFecha & "','" & sHora & "','" & sPantalla & "','" & sMensaje & "')")

r=conn.exec("Sentencia affected_rows")

 

Debería dejar en el result r el número que quieres, con el nombre de campo que devuelva dicha sentencia... Repito que es algo que nunca he hecho o probado.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
shordi escribió: [Ver mensaje]
Cuando en gambas utilizas Exec en una conexión, gambas pasa directamente la consulta a la BD. Si no utilizas los mecanismos de gambas para comunicarte con la BD, la respuesta te la debe dar la propia BD.

Fuera de eso, y teniendo en cuenta que nunca he usado affected_rows para nada, un miconexion.Exec("sentencia sql") siempre devuelve un objeto de tipo result.
Es decir que

Dim r as result

conn.Exec("INSERT INTO LOGS (FECHA,HORA,PANTALLA,MENSAJE) VALUES ('" & sFecha & "','" & sHora & "','" & sPantalla & "','" & sMensaje & "')")

r=conn.exec("Sentencia affected_rows")

 

Debería dejar en el result r el número que quieres, con el nombre de campo que devuelva dicha sentencia... Repito que es algo que nunca he hecho o probado.

Saludos.


Lo primero de todo, muchas gracias por la aclaración que parece muy lógica, es la DB la que trabaja con la sentencia.
Hay otra forma de poder conectar con la base de datos, me refiero a comunicar con ella para ejecutar sentecias DML (INSERT, UPDATE,SELECT, DELETE)??
he visto que sobre la conexión existe un conn.SQL....alguien lo ha utilizado??

Muchas gracias.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
En las propiedades de la clase conexión tienes los métodos .Create, .Edit y Delete, que devuelven un result "de edición". Una vez rellenado el mismo, con el método .Update se produce la grabación en la BD.
Son, quizá algo más lentos que usar directamente el SQL (en realidad usan el SQL internamente, pero antes de llegar a él hacen sus "cositas"), pero dan más posibilidades en lo que a la manipulación y verificación de los datos se refiere. Su ventaja principal no es esa, es que si utilizas los mecanismos de gambas, estás haciendo tu proyecto independiente de la BD, es decir, independiente de su dialecto de SQL y peculiaridades. Hoy día los driver que maneja gambas son para mysql, postgresql y sqlite. Se puede también, con las limitaciones que tiene "per se", utilizar ODBC.

El sistema, básicamente, sería:

dim r as result
r=miconexion.Edit("mitabla","mi_clave=&1",variable_con_la_clave)
r!micampo1=mivalor1
r!micampo2=mivalor2
r!micampo3=mifuncionquedevuelve(mivalor3)
...
...
miconexion.update
 


Para procesos por lotes o transaccionales también puedes usar los métodos
    miconexion.Begin
...
    operaciones DML

...
    miconexion.Commit

catch
    miconexion.rollback
 


Para la mayor parte de las operaciones, es suficiente. Para las peculiaridades de alguno de los drivers, también conviene enlazar los componentes específicos. Es decir con el componente gb.db es suficiente, pero para cuestiones específicas puedes enlazar tambié gb.db.mysql o gb.db.sqlite3.
Si tienes dudas, aquí estamos.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
Muchas gracias por la aclaración.
Por mi experiencia soy desarrollador de utilizar mucho Stored Procedures (Packages en Oracle), Triggers etc y allí traspaso la lógica de negocio, digamos que en el desarrollo empresarial y dependiendo de los proyectos es una técnica estandarizada.
Entiendo que para poder ejecutar un Stored Procedure o Function en Mysql lo correcto es hacer un conn.Exec("CALL SP_CLIENTES")??

Gracias y saludos.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
Nunca lo he probado, yo sólo utilizo triggers para simular integridad referencial entre bases de datos distintas. Las procedures y más específicas las hago en Gambas.
Pruebalo y si te funciona, cuéntalo, que me interesa.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
shordi escribió: [Ver mensaje]
Nunca lo he probado, yo sólo utilizo triggers para simular integridad referencial entre bases de datos distintas. Las procedures y más específicas las hago en Gambas.
Pruebalo y si te funciona, cuéntalo, que me interesa.


Buenas como contestación a todo junto os comento:

1- Para poder saber las rows afectadas en un insert o update, que nos puede ser muy util para evaluar la lógica de si realmente hemos afectado a algo y saber si ha ido bien o no.
conn.Exec("INSERT INTO LOGS (.........)
conn.Exec("SELECT row_count() AS AFFECTED_ROWS")

2 - la prueba es satisfactoria en los Procedures y se cargan directamente en un Result tal que así. el nombre STP_TEST() con la lógica que necesite negocio.
rstResultado = conn.Exec("CALL STP_TEST()")

Saludos.
 



 
calcena - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Affected Rows 
 
calcena escribió: [Ver mensaje]
shordi escribió: [Ver mensaje]
Nunca lo he probado, yo sólo utilizo triggers para simular integridad referencial entre bases de datos distintas. Las procedures y más específicas las hago en Gambas.
Pruebalo y si te funciona, cuéntalo, que me interesa.


Buenas como contestación a todo junto os comento:

1- Para poder saber las rows afectadas en un insert o update, que nos puede ser muy util para evaluar la lógica de si realmente hemos afectado a algo y saber si ha ido bien o no.
conn.Exec("INSERT INTO LOGS (.........)
conn.Exec("SELECT row_count() AS AFFECTED_ROWS")

2 - la prueba es satisfactoria en los Procedures y se cargan directamente en un Result tal que así. el nombre STP_TEST() con la lógica que necesite negocio.
rstResultado = conn.Exec("CALL STP_TEST()")

Saludos.

Gracias. Otra cosita más...
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Caracteres De Url [SOLUCIONADO] shordi General 4 Lunes, 23 May 2016, 22:28 Ver último mensaje
vuott
No hay nuevos mensajes [SOLUCIONADO] API AEMET Grandamakulo General 18 Jueves, 22 Marzo 2018, 21:52 Ver último mensaje
Grandamakulo
No hay nuevos mensajes [SOLUCIONADO] GridView Que Aumenta De Rows calcena General 16 Viernes, 10 Agosto 2018, 11:38 Ver último mensaje
calcena
No hay nuevos mensajes Idioma Del Ide [SOLUCIONADO] ahtonio Instalación 12 Martes, 11 Septiembre 2018, 23:41 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron