Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   uso de comillas (https://www.clubdelphi.com/foros/showthread.php?t=84315)

diablo66 04-10-2013 07:02:28

uso de comillas
 
serian tan amables de explicarme en este código el uso de comillas ya que yo uso parámetros para hacer lo mismo que hace este código
Código Delphi [-]
            with query do begin
            Close;
            SQL.Clear;
            SQL.Add('UPDATE categorias SET nombre = ''' + txtCategoria.Text + ''',');
            SQL.Add('cuenta = ''' + txtClave.Text + ''',');
            SQL.Add('fecha_umov = ''' + FormatDateTime(Formato_Fecha,Date) + '''');//'mm/dd/yyyy'
            SQL.Add('WHERE clave = ' + IntToStr(iClave));
            ExecSQL;
            Close;
        end;

general mente lo escribo asi
Código Delphi [-]
 AdoQuery:=TADOQuery.Create(nil);

   try

    AdoQuery.Connection:=ADOconection1;
    AdoQuery.SQL.Add('SELECT fecha,P_Id  FROM total WHERE fecha=:fecha and P_Id=:P_Id2');
    AdoQuery.Parameters.ParamByName('fecha').Value := fecha;
    AdoQuery.Parameters.ParamByName('P_Id2').Value := P_Id;
    AdoQuery.Prepared;
    AdoQuery.Open;
    AdoQuery.First;

blackx5n 04-10-2013 08:07:56

No es necesario que agreges muchas comillas simples para concatenar con los edits

Código Delphi [-]
SQL.Add('UPDATE categorias SET nombre = ' ' ' + txtCategoria.Text + ' ' ',');

Prueba hacerlo de esta forma:

Código Delphi [-]
with query do begin
  Close;
  SQL.Clear; 
SQL.Add('UPDATE categorias SET nombre = ' + txtCategoria.Text + ','+  
    'cuenta = ' + txtClave.Text + ','+
    'fecha_umov = ' + FormatDateTime(Formato_Fecha,Date) +
    'WHERE clave = ' + IntToStr(iClave));
     ExecSQL;
     Close;
   end;

olbeup 04-10-2013 09:02:29

Hola diablo66,

Prueba con esto, sencillo, claro y fácil de entender.
Código Delphi [-]
...
begin
  with Qry do
  begin
    Close;

    SQL.Add('UPDATE Categorias');
    SQL.Add('  SET');
    SQL.Add('    NOMBRE      = ' + QuotedStr(txtCategoria.Text));
    SQL.Add('    ,CUENTA     = ' + txtClave.Text));
    SQL.Add('    ,FECHA_UMOV = ' + QuotedStr(FormatDateTime('dd/mm/yyyy', date)));
    SQL.Add('  WHERE CLAVE = ' + IntToStr(iClave));

    ExecSQL;

    Close;
  end;
end;

Un saludo.

duilioisola 04-10-2013 14:09:58

Explicación de comillas.
Si quieres hacer una cadena que contenga comillas simples, la forma de "engañar" al compilador es poner doble comilla simple.
El compilador al recorrer tu código cuando encuentra una comilla simple trata a lo que sigue como una cadena hasta que encuentra la siguiente comilla simple. La excepción es cuando encuentra la comilla que cierra la cadena, se fija si hay otra detrás. Si es así, trata esa doble comilla simple como una sola comilla simplre y sigue tratando lo que sigue como cadena.

Código Delphi [-]
s := '';
// s = string vacío

s := '''';
// s = ' (una comilla simple)

s := '''123''';
// s = '123'

x := 'ABC';
s := '''' + x + '''';
// s = 'ABC'

nlsgarcia 04-10-2013 15:54:07

diablo66,

Cita:

Empezado por diablo66
...explicarme en este código el uso de comillas...

Revisa este código:
Código SQL [-]
SQLWMI := 'SELECT Name, ProcessId, Caption, ExecutablePath FROM Win32_Process Where Name = ' + QuotedStr(ProcessName);
El código anterior concatena una variable String en una consulta SQL, lo cual elimina la necesidad del uso de comillas simples y facilita la lectura y escritura del mismo.

Revisa esta información:



Espero sea útil :)

Nelson.

diablo66 05-10-2013 04:27:13

gracias a todos me fue de gran ayuda

mcs 05-10-2013 10:58:29

En mi opinión, continua trabajando con parámetros. Te ahorrarás muchos problemas, y el código queda más limpio que no concatendando cadenas, ya sea usando muchas comillas o con la función QuotedStr().

olbeup 05-10-2013 23:18:16

Se queda más limpio con QuotedStr y, jamas he utilizado parámetros alguno.

Un saludo.

ecfisa 06-10-2013 00:31:16

Cita:

Empezado por mcs (Mensaje 467897)
En mi opinión, continua trabajando con parámetros. Te ahorrarás muchos problemas, y el código queda más limpio que no concatendando cadenas, ya sea usando muchas comillas o con la función QuotedStr().

^\||/

Y lo mas importante: Con el uso de parámetros se anula la posibilidad de la inyección SQL

Saludos :)

nlsgarcia 06-10-2013 02:06:02

diablo66,

Cita:

Empezado por mcs
...En mi opinión, continua trabajando con parámetros...

Cita:

Empezado por olbeup
...queda más limpio con QuotedStr y jamas he utilizado parámetros alguno...

Cita:

Empezado por ecfisa
...Con el uso de parámetros se anula la posibilidad de la inyección SQL...

En general lo ideal es usar parámetros en SQL, sin embargo el uso de la función QuotedStr o AnsiQuotedStr pueder ser muy práctico en casos particulares, no como norma de programación de BD con Structured Query Language.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 06:38:01.

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