Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Asignar resultado de una consulta sql de tabla access a una variable (https://www.clubdelphi.com/foros/showthread.php?t=90469)

ederfcr 16-06-2016 20:39:25

Asignar resultado de una consulta sql de tabla access a una variable
 
Tengo un requerimiento de guardar unos datos en una tabla de access. Son dos posibilidades: si un usuario con campo cc (cedula o identificacion) existe ya como fila o registro, en cuyo caso actualizo algun campo y la otra si el usuario no existe en la tabla en cuyo caso ingreso datos en los campos de la tabla.

Se me ha ocurrido hacer una consulta como la siguiente en SQL que me genera la variable CANREG, ccusu es la variable tipo String donde almaceno la cédula proveniente desde un TEdit (debo decir que me interesa tenerla como String pues valido que sea cedula anteriormente con otro procedimiento):

Código Delphi [-]
 rs2.CommandText := 'SELECT COUNT(*) AS CANTREG FROM plancli WHERE CC = ' + ccusu;

Si recibo un valor 0, me encargaría de generar la actualizacion de algun campo, o si es > 0 inserto nueva fila con todos los datos.

Necesito su ayuda con una guia que deberia hacer para capturar esa variable CANREG y poder hacer esa validación, con que comando.

O si por el contrario hay otro código que haga lo que necesito.


Mil gracias


EderFCR

ederfcr 16-06-2016 21:27:26

Envio codigo adicional para compresion:
 
Envío código adicional para compresión:



Código Delphi [-]
  rs2 := TADODataSet.Create(nil);
  rs2.Connection := connection2;
  rs2.CursorType := ctStatic;
  rs2.LockType := ltOptimistic;
  rs2.CommandText := 'SELECT COUNT(*) AS CANTREG FROM plancli WHERE CC = ' + ccusu;
  rs2.Open();

ecfisa 16-06-2016 22:10:33

Hola.

Intenta de este modo:
Código Delphi [-]
function CantCed(Connect: TADOConnection; const Cedula: string): Integer;
var
  ads: TADODataSet;
begin
  ads := TADODataSet.Create(nil);
  try
    ads.Connection  := Connect;
    ads.CommandText := 'SELECT COUNT(*) AS CANTREG FROM PLANCLI WHERE CC = :PARAM';
    ads.Parameters.ParamByName('PARAM').Value := Cedula;
    ads.Open;
    Result := ads.FieldByName('CANTREG').Value;
  finally
    ads.Close;
    ads.Free;
  end;
end;

Ej. de uso:
Código Delphi [-]
var
  r : Integer;
begin
  r := CantidadCed(ADOConnection1, '25374893');
  if r = 0 then
    ShowMessage('No existen registros con esa cédula')
  else
    ShowMessage(Format('Existen %d registros con esa cédula',[r]));

Saludos :)

AgustinOrtu 16-06-2016 22:12:27

Si bien por algun lado lei que existe una clase TADODataSet, nunca la he usado

Siempre uso TADOQuery para ejecutar consultas SQL (en general, todos los select) y TADOCommand para el resto

Yo cambiaria el TADODataSet por TADOQuery y como siempre aconsejamos, mejor temprano que tarde, hay que acostumbrarse a usar parametros en las sentencias SQL

Código Delphi [-]
procedure ...
var
  qry: TADOQuery;
  Cantidad: Integer;
begin
  qry := TADOQuery.Create(nil);
  try
     // setear propiedades necesarias, Conection  ConnectionString, etc
     qry.SQL.Text := ' SELECT COUNT(*) AS CANTREG FROM plancli WHERE CC = :ccusu ';
     qry.SQL.Text.Parameters.ParamByName('ccusu').DataType := TFieldType.ftString;
     qry.SQL.Text.Parameters.ParamByName('ccusu').Value := ccusu;
     qry.Open;   
     Cantidad := qry.FieldByName('CANTREG').AsInteger; // accedes al campo y lo guardas en una variable integer 
  finally
     qry.Free;
  end;
end;

ederfcr 17-06-2016 18:10:59

Problema resuelto!!
 
Hola buen día.

Resuelto el problema, asi quedo mi función:

Código Delphi [-]
function TDBClass.CantCed(Connect: TADOConnection; var Cedula: string): Integer;
var
  ads: TADODataSet;
begin
  ads := TADODataSet.Create(nil);
  try
    ads.Connection  := Connect;
    ads.CursorType := ctStatic;
    ads.LockType := ltOptimistic;
    ads.CommandText :='SELECT COUNT(*) AS CANTREG FROM plancli WHERE cc=PARAM';
    ads.Parameters.ParamByName('PARAM').Value := Cedula;
    ads.Open;
    CantCed := ads.FieldByName('CANTREG').Value;
  finally
    ads.Close;
    ads.Free;
  end;
end;

Quedo superbien y corriendo. Mil Gracias.


EderFCR

AgustinOrtu 18-06-2016 00:09:37

Hay un error de tipeo aca:

Código Delphi [-]
  ads.CommandText :='SELECT COUNT(*) AS CANTREG FROM plancli WHERE cc=PARAM';

Te faltaron los dos puntos para indicar que es un parametro:

Código Delphi [-]
  ads.CommandText :='SELECT COUNT(*) AS CANTREG FROM plancli WHERE cc= :PARAM';

ederfcr 18-06-2016 00:32:07

Si, gracias. Tenia una pequeña falla.

EderFCR


La franja horaria es GMT +2. Ahora son las 11:53:44.

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