Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Resultado de un Execute con DBxpress

Buenos dias, ha ver si me podeis hechar una mano.

Como en cualquier programa, se usan sentencias sql para trabajar con firebird, por ejemplo
Código Delphi [-]
function TFormBBDD.CreaTabla(tabla, sql: string): boolean;
var
  resultado: boolean;
begin
  Result := False;
  if BBDDconectadoBase = False then
    Exit;
  if ExisteTabla(tabla) = True then
    Exit;
  try
    SQLConnection.ExecuteDirect(sql);
    BBDDstringMonitor := 'BBDD-Tabla ' + tabla + ' creada';
    MonitorBBDD(BBDDstringMonitor);
    resultado := True;
  except
    on E: Exception do
    begin
      resultado := False;
      BBDDstringMonitor := 'BBDD-No se ha creado o alterado la tabla ' + tabla +
                           '. Error SQL' + #13 + #10 + E.Message;
      Application.MessageBox(PChar(BBDDstringMonitor), 'Atencion', MB_OK);
      MonitorBBDD(BBDDstringMonitor);
    end;
  end;
  Result := resultado;
end;
Cuando se genera un error en la sentencia, except me devuelve el error y tal, pero, si por ejemplo la sentencia sql es
'UPDATE CIUDADES SET ALCALDE='MALO' WHERE SUELDO>10000'
¿Como se cuantas filas se ven afectadas? parece que hay un componente TSQLDataSet.ExecSQL que devuelve el resultado sobre el numero de filas afectadas, pero no encuetro la solucion usando DBxExpres (dbxfb4d14.dll y fbclient.dll)

¿Alguna idea?

Gracias
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #2  
Antiguo 20-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.325
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Siempre puedes lanzar la sentencia equivalente para contar, antes del UPDATE (con el mismo WHERE):

Código SQL [-]
  SELECT COUNT(clave_primaria) AS CUENTOS WHERE SUELDO>10000
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 20-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Si, es un buen truco, pero a la pregunta formulada no hay respuesta, es decir dbxexpress no devuelve un resultado salvo en
Código Delphi [-]
    FormBBDD.SQLConnection.Execute(sql, nil, @DataSet);

Por preguntar ¿eh?

Pero, ¿Que pasa si la sentencia sql viene de un campo TMemo?
Vamos, lo que he hecho ha sido porner un TMemo y un boton, entonces queda
Código Delphi [-]
procedure TFormConfTablas.BotonSQLClick(Sender: TObject);
var
  sql, msg: string;
begin
  sql := MemoSQL.Text;
  try
    FormBBDD.SQLConnection.ExecuteDirect(sql)
  except
    on E: Exception do
    begin
      msg := E.Message;
      Application.MessageBox(PChar(msg), 'Atencion', MB_ICONERROR);
    end;
  end;
end;
En realidad no se que sentencia voy a escribir, esto lo hago para borrar registro "sucios", etc.
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.

Última edición por cesarsoftware fecha: 20-03-2013 a las 12:34:07.
Responder Con Cita
  #4  
Antiguo 20-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.325
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Supongo que en ese caso dependería de si el SGBD devuelve esa información y si los componentes permiten recuperarla.
Siento no poder ayudarte más.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 20-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Gracias neftali, creo que los componentes dbxpress no devuelven nada, segun lo que leido en los manuales, por eso preguntaba, sniff
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #6  
Antiguo 20-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Otra opción es hacerlo todo por procedimientos almacenados, y que estos procedimientos tengan un parámetro de salida con el resultado

Por dar "soluciones" que no quede :P
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #7  
Antiguo 20-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Eso es lo curioso.

Nuestro atolondrado amigo César ya había comentado algo sobre la alternativa de usar un componente TSQLXXX, que como todos los TSQLXXX nativos forman parte de dbExpress (o DBX), pero al parecer él no lo ve así:
Cita:
Empezado por cesarsoftware Ver Mensaje
¿Como se cuantas filas se ven afectadas? parece que hay un componente TSQLDataSet.ExecSQL que devuelve el resultado sobre el numero de filas afectadas, pero no encuetro la solucion usando DBxExpres (dbxfb4d14.dll y fbclient.dll)
Y es que la propiedad RowsAffected que juanelo atinadamente mencionó, viene a ser lo mismo que tomar el resultado devuelto por el método ExecSQL:
Cita:
ExecSQL returns the number of rows affected by the executed command. This becomes the value of the RowsAffected property.
Saludos.
Responder Con Cita
  #8  
Antiguo 20-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Eso es lo curioso.

Nuestro atolondrado amigo César ya había comentado algo sobre la alternativa de usar un componente TSQLXXX, que como todos los TSQLXXX nativos forman parte de dbExpress (o DBX), pero al parecer él no lo ve así:

Y es que la propiedad RowsAffected que juanelo atinadamente mencionó, viene a ser lo mismo que tomar el resultado devuelto por el método ExecSQL:

Saludos.
Al, no se si quieres que me mosquee contigo o que te ignore, al menos lo de "atolondrado" te lo podias guardar para ti, al igual que tus correcciones sobre "biblioteca" y "ha ver", si vas a aportar algo positivo sobre delphi hazlo, parece ser que no soy el unico que busca una respuesta en una pregunta.

Y la respuesta es esta, porque al menos procuro trabajar y buscar la solucion mientras converso en este post
Código Delphi [-]
procedure TFormConfTablas.BotonSQLClick(Sender: TObject);
var
  sql, msg: string;
  SQLQuery: TSQLQuery;
begin
  BotonSQL.Enabled := False;
  sql := MemoSQL.Text;
  SQLQuery := TSQLQuery.Create(nil);
  try
    SQLQuery.SQLConnection := FormBBDD.SQLConnection;
    SQLQuery.CommandText := sql;
    SQLQuery.ExecSQL(True);
    Application.MessageBox(PChar(IntToStr(SQLQuery.RowsAffected) +
                           ' Filas afectadas'), PChar(String(NombrePC)), MB_OK);
  except
    on E: Exception do
    begin
      msg := E.Message;
      Application.MessageBox(PChar(msg), 'Atencion', MB_ICONERROR);
    end;
  end;
  SQLQuery.Free;
  BotonSQL.Enabled := True;
end;
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema file not found dbxpress.dcu liito16 Varios 3 28-09-2012 05:18:56
Problemas con dbxpress en dll mcsebas Conexión con bases de datos 3 05-08-2010 08:33:04
Busqueda en SQL Server con dbxpress mbcito SQL 1 10-11-2005 16:42:43
problema con delphi7,firebird 1.5 y dbxpress Eskema Conexión con bases de datos 2 27-07-2005 13:22:52
donde poner los componentes dbxpress wonder boy Conexión con bases de datos 5 23-03-2004 15:25:51


La franja horaria es GMT +2. Ahora son las 14:15:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi