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)
-   -   Eliminar Registro Con ADODataSet (https://www.clubdelphi.com/foros/showthread.php?t=75634)

mellomda 09-09-2011 00:49:52

Eliminar Registro Con ADODataSet
 
Hola Gente, espero me puedan ayudar. estuve buscando en el foro y encontre temas relacionados pero no la solucion a mi problema...

el Problema que tengo es el siguiente:
Estoy usando ADO para conectarme a una base de datos SQL con Delphi; Utilizo un ADOConection Para Establecer la conexion con la base de datos, y diferentes ADODataSets para mostrar los datos de las diferentes tablas y para realizar las consultas. el problema es cuando intento eliminar un registro... Hago lo siguiente:

1- Consulta: String;
2- Consulta := 'Delete From ' + Tabla + ' Where ' + Campo + ' = ' + Dato;
3- ADODataSet.Active := False;
4- ADODataSet.CommandText := SQL;
5- ADODataSet.Active := True;

1- Declaro Una Variable Auxiliar De Tipo String Para Asignarle la Consulta
2- Le Asigno la Consulta a la Variable Auxiliar
3- Desconecto el DataSet Para Poder Realizar La Consulta
4- Ingreso la Consulta Al DataSet
5- Vuelvo a Conectar el DataSet Para Realizar La Consulta y Reflejar Los Resultados

Teoricamente No hay errores, ya que luego de ultima instruccion el registro queda eliminado, el programa sigue andando y los resultados reflejados en el DBGrid son correctos, Pero me sale un cartel (Cada vez que elimino un registro) que dice lo siguiente:

'ADODataSet: CommandText Does Not Return A Result Set'

Analizando un poco lo que dice, suena logico, ya que la consulta realizada no devuelve ningun dato (o conjunto de datos), pero en fin, como le hago sino para eliminar un registro sin que aparezca ese molesto cartel cada vez que se realiza la operacion???

oscarac 09-09-2011 00:58:36

en lugar del active usa execsql
para cuando abras el query

ecfisa 09-09-2011 01:24:46

Hola.

No soy experto en ADO pero el componente TADoDataSet tiene el método Delete que cumple el cometido que estás buscando mediante la sentencia SQL.

Código Delphi [-]
  ADODataSet1.Delete;
Y no necesita ser cerrado y abierto para ejecutarlo


Saludos.

ecfisa 09-09-2011 01:45:31

Hola de nuevo.

El equivalente a lo que buscas hacer sería:
Código Delphi [-]
  with ADODataSet1 do
  begin
    Close;
    CommandText:= 'SELECT * FROM ' + TABLA + ' WHERE OrderNo = ' + DATO;
    Open;
    Delete;
  end;
En este caso sí es necesario cerrarlo y abrirlo pero por la búsqueda, el método Delete en sí no lo requiere, solo elimina el dato previamente seleccionado.

Un saludo.

mellomda 09-09-2011 10:57:49

Gracias
 
Muchisimas gracias!!!!! lo voy a probar mañana y les comento. Disculpen la demora, no sabia que me ivan a contestar tan rapido, gracias...

oscarac 09-09-2011 15:14:04

pues aqui tienes una idea de la frecuencia en la que entran las personas y saques tus conclusiones

mellomda 10-09-2011 03:10:06

Problemas con el 'As' al Eliminar Registro Con ADO
 
Genteee, muchisimas gracias a todos, me anduvo de lujo el codigo que me pasaron. Espero no molestarlos, pero ahora me surgio otro problema, quizas me puedan ayudar. Cuando levanto los datos de las tablas SQL (Con el ADODataSet), lo hago mediante una consulta SQL, pero uso el 'As' Para que los titulos de los campos se muestren diferente

Ejemplo: Select ID As Codigo, RacSoc As [Razon Social].....Etc).

Loa Datos Se muestran bien, las consultas se realizan bien, pero a la hora de eliminar un registro Con las siguientes instrucciones (Gracias ecfisa):
Código Delphi [-]
  with ADODataSet1 do   
  begin     
     Close;     
     CommandText:= 'SELECT * FROM ' + TABLA + ' WHERE OrderNo = ' + DATO; 
     Open;     
     Delete;   
  end;
Me dice que no encuentra el Campo 'Codigo'.

Nota: En El DataSet tengo los campos agregados como persistentes (Add All Fields) y estos campos se agregan pero con el alias (Codigo, Razon Social, etc.). El problema queda resuelto cuando saco 'TODOS' los As de la consulta SQL, pero los titulos de las columnas en el DBGid quedan feos (ID, RacSoc, Etc.).

Espero que me hayan entendido, y espero no molestarlos, desde ya muchas gracias, por ayuda...

ecfisa 10-09-2011 04:08:31

Cita:

El problema queda resuelto cuando saco 'TODOS' los As de la consulta SQL, pero los titulos de las columnas en el DBGid quedan feos (ID, RacSoc, Etc.).
Hola mellomda.

Si tenés los agregados los campos persistentes hacé lo siguiente: Abrí el Fields Editor y en la propiedad DisplayLabel de cada uno de los campos, ingresá el texto que deseas que se muestre.

De no tenerlos agregados (o sí), también podés indicarle (en el evento OnShow del form por ejemplo) el texto a mostrar de este modo:
Código Delphi [-]
  ADODataSet1.FieldByName('NOMBRE_DEL_CAMPO').DisplayLabel:= 'LO QUE QUIERO QUE MUESTRE';
  ...

Saludos.:)

mellomda 10-09-2011 06:29:44

Gracias!!!
 
Perfecto!!!!! Gracias ecfisa. Todo anduvo perfecto, muchisimas gracias por tu ayuda y tu tiempo...


La franja horaria es GMT +2. Ahora son las 22:25:42.

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