Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-05-2006
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 10-05-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, has la prueba con esto

Código:
   query.sql.text:='DELETE FROM TempVentas '+
                        'WHERE fIdDCS LIKE '+#39+'PO'+'%'+#39;
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 10-05-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Cómo te estas conectando a la base de datos access?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 11-05-2006
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
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ó.
Responder Con Cita
  #5  
Antiguo 11-05-2006
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 11-05-2006
Toñico Toñico is offline
Miembro
 
Registrado: ene 2005
Posts: 50
Poder: 20
Toñico Va por buen camino
No hay como buscar en internet para encontrar todas las respuestas.

Equivalencias:

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


Un saludo a todos.
Responder Con Cita
  #7  
Antiguo 11-05-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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
como saber numero de registros de una tabla usando un clientdataset? acl_gandalf Conexión con bases de datos 11 26-06-2023 19:09:19
Borrar registros yorllito Conexión con bases de datos 3 09-04-2006 16:04:18
agregar registros usando INSERT ... papu MySQL 2 25-07-2005 01:18:40
Borrar registros dmagui MySQL 2 11-07-2005 20:14:25
Borrar registros duplicados. Adrian Murua Firebird e Interbase 3 07-10-2003 06:28:46


La franja horaria es GMT +2. Ahora son las 13:41: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
Copyright 1996-2007 Club Delphi