Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Borrar registros usando operador LIKE (https://www.clubdelphi.com/foros/showthread.php?t=31532)

Toñico 10-05-2006 19:02:29

Borrar registros usando operador LIKE
 
Hola a todos,

Estoy haciendo un procedimiento que borra ciertos registros de una tabla en una base de datos Access.

Para ello uso el componente ADOCommand al que le paso una secuencia SQL. Hasta aquí todo controlado. El problema lo tengo cuando intento usar el operador LIKE para borrar registros que cumplan la expresión que le paso.

Por ejemplo:

DELETE FROM TempVentas WHERE fIdDCS LIKE 'PO????'

Esta secuencia ejecutada desde Access funciona correctamente, pero desde Delphi no consigo que funcione. He puesto dobles comillas, he cambiado los ? por un *, he ampliado el ancho de la expresión al ancho del campo, ... Pero no consigo que funcione.

¿Alguien me puede decir cual es la secuencia correcta?

Muchas gracias a todos de antemano.

Caro 10-05-2006 21:00:00

Hola, has la prueba con esto

Código:

  query.sql.text:='DELETE FROM TempVentas '+
                        'WHERE fIdDCS LIKE '+#39+'PO'+'%'+#39;


delphi.com.ar 10-05-2006 23:30:25

¿Cómo te estas conectando a la base de datos access?

Toñico 11-05-2006 09:10:03

Me conecto a la base de datos usando el componente ADOConnection.

Los Procedimientos que uso tanto para conectarme como para intentar borrar registros son los siguientes:

Código:

Código Delphi [-]

 
procedure TDM.AbrirDBPrincipal;
Var
        DataSource: String;
begin
        Try
            ADOConPrincipal.Connected := False;
            ADOConPrincipal.LoginPrompt := False;
            DataSource := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
                                  PathProgram + '\' + NombreDB + '.mdb' + ';' +
                                  'Persist Security Info=False;' +
                                  'Jet OLEDB:Database Password=xxx';                 
            ADOConPrincipal.ConnectionString := DataSource;
            ADOConPrincipal.CursorLocation := clUseServer;
            ADOConPrincipal.Connected := True;
        Except
                on E: Exception do
                begin
                        MessageDlg(E.Message,  mtWarning, [mbOk], 0);
                        Application.Terminate;
                end;
        End;
end;

procedure TDM.EliminarExcluidosVentas;
var
        cSQL: String;
begin
        Try
                ADOComPrincipal.Connection := ADOConPrincipal;
                With MDExcluidos do
                begin
                        First;
                        While Not Eof do
                        begin
                            cSQL := 'DELETE FROM SalesTemp ' +
                                        'WHERE fIdDCS LIKE ' +
                                        QuotedStr(FieldByName('fIdCodigo').AsString);
                            ADOConPrincipal.BeginTrans;
                            ADOComPrincipal.CommandText := cSQL;
                            ADOComPrincipal.Execute;
                            ADOConPrincipal.CommitTrans;
                            Next;
                        end;
                end;
        Except
                on E: Exception do
                begin
                        ADOConPrincipal.RollbackTrans;
                        MessageDlg(E.Message,  mtWarning, [mbOk], 0);
                        raise;
                end;
        end;
end;

La última prueba que hice ayer fue usar la funcion QuotedStr(), y tampoco me funcionó.

Toñico 11-05-2006 09:27:08

Hola Caro, muchas gracias por tu respuesta.

He probado a usar el caracter "%" y si que funciona, aunque supongo que es el equivalente a "*" en SQL, es decir, cualquier grupo de caracteres.

¿Podrías decirme que caracter es equivalente a "?", es decir, un único caracter?

De esta forma podría dejar la aplicación mucho mas versatil.

Gracias por todo y a todos.

Toñico 11-05-2006 18:54:33

No hay como buscar en internet para encontrar todas las respuestas.

Equivalencias:

MATCH ANY STRING MATCH ANY CHARACTER
-------------------------------------------------------------
ADO % _
-------------------------------------------------------------
DAO * ?
-------------------------------------------------------------


Un saludo a todos.

delphi.com.ar 11-05-2006 20:09:17

Ignorando un poco el tema... ¿Que pasa si ejecutas la consulta con la propiedad CursorLocation = clUseServer? (Estoy buscando algo similar al PassThrough de DAO)

Saludos!


La franja horaria es GMT +2. Ahora son las 07:12: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