Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar Registro (https://www.clubdelphi.com/foros/showthread.php?t=71200)

agustin173 07-12-2010 00:17:28

Eliminar Registro
 
Hola muchachos como estan

Mi problema es que deseo eliminar un registro pero me da un error al momento de correr la aplicacion me explico mejor

Estoy usando delphi 7

Una tabla llamada = Suplidor
con 13 Campos que son: (Codigo,Fecha,Rnc,Suplidor,Contacto,Direccion,Area,Telefono,Area1,Fax,Termino,Limite y Email)
un Adoquery llamado = Temp

el codigo es el siguiente

Código Delphi [-]
IF Application.MessageBox ('Desea Eliminar Este Registro'+
           Chr(13)+'',
          '',mb_YesNo+MB_IconStop) = idYes Then
    Begin
     Temp.SQL.Clear;
     Temp.Sql.Text:='Delete from Suplidor where Codigo = :Codigo and Fecha = :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = :Direccion and Area = :Area and Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email';
     Temp.Parameters.ParamByName('Codigo').Value:= EDCodigo.text;
     Temp.Parameters.ParamByName('FECHA').Value:= EDfecha.Text;
     Temp.Parameters.ParamByName('Rnc').Value:= MERnc.text;
     Temp.Parameters.ParamByName('Contacto').Value:= EDContacto.text;
     Temp.Parameters.ParamByName('Direccion').Value:= EDDireccion.text;
     Temp.Parameters.ParamByName('Area').Value:= CBTelefono.text;
     Temp.Parameters.ParamByName('Telefono').Value:= METelefono.text;
     Temp.Parameters.ParamByName('Area1').Value:= CBFax.text;
     Temp.Parameters.ParamByName('Fax').Value:= MEFax.text;
     Temp.Parameters.ParamByName('Termino').Value:= CBterminos.text;
     Temp.Parameters.ParamByName('Limite').Value:= EDLimite.text;
     Temp.Parameters.ParamByName('Email').Value:= EDEmail.text;
     Temp.ExecSQL;
     ShowMessage('Registro Eliminado');
     SuplidorModificar.Enabled := False;
     SuplidorEliminar.Enabled := False;
    End;

Cuando intento correr la aplicacion me manda un mensage que dice:

"String Literal may have at most 255 elements"

el error me lo marca en la linea del Temp.Sql.Text =

si le quito a la linea los dos ultimos campos como son limite y email me correr sin problema pero entonce no puedo eliminar esos dos campos que hago muchachos para resolver esto.

Casimiro Notevi 07-12-2010 01:27:47

Por probar, prueba a añadir varias líneas:

Código Delphi [-]
Temp.SQL.Clear;
Temp.Sql.Lines.Add('Delete from Suplidor where Codigo = :Codigo and Fecha =')+
Temp.Sql.Lines.Add(' :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = :Direccion and Area = :Area and ')+
Temp.Sql.Lines.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');
Temp.Parameters.ParamByName('Codigo').Value:= EDCodigo.text;
etc...

microbiano 07-12-2010 01:37:54

complementar la respuesta
 
eh amigo casimiro a donde quedo la redaccion de texto resaltado en delphi ??????

respondiendo a la pregunta:
Código Delphi [-]
        with Fmodulo.Qry_Temp2 do
         begin
          SQL.Clear;
          SQL.Add('delete from clientes');
          SQL.Add('where idcliente=:peliminar2');
          Parameters.ParamByName('peliminar2').Value:=weliminar;
          ExecSQL;
          Application.MessageBox('Registro Eliminado con Exito','Registro Eliminado', MB_OK + MB_ICONINFORMATION);
          limpiar;
          saca_consecutivo;
         end;

espero te sirva

agustin173 07-12-2010 03:20:53

voy a probar les cuento mañana muchachos

agustin173 07-12-2010 03:38:09

no me funciono me da un error donde dice lines como que no lo reconoce

osea el temp.sql.lines

no me correr por el lines no se que hacer

Casimiro Notevi 07-12-2010 14:20:05

Cita:

Empezado por agustin173 (Mensaje 384194)
no me funciono me da un error donde dice lines como que no lo reconoce

osea el temp.sql.lines

no me correr por el lines no se que hacer

Depende del componente que sea, puede que: temp.selectsql.lines

agustin173 07-12-2010 14:54:32

Tampoco funciona asi con Temp.Selectsql.line,

el selectsql no lo reconoce

puedes darme un codigo que me funcione para eliminar registro de una tabla que use cadena larga por favor, es que no se mucho de programacion.

el componente Temp es un Adoquery

Casimiro Notevi 07-12-2010 15:37:38

temp.sql.add

Lo acabo de mirar, es así.

agustin173 07-12-2010 18:27:44

casimiro lo hice como me digiste pero me da otro error

cuando intento correr el programa el error dice:

"Statement expected, but expresion of type 'integer' found'

y me lo marca en la siguiente line:

Código Delphi [-]
Temp.Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');

Que debo hacer.

Casimiro Notevi 07-12-2010 18:30:47

¿Puedes poner exactamente el código que estás usando?

agustin173 08-12-2010 01:19:32

casimiro el codigo es el siguiente:

Código Delphi [-]
IF Application.MessageBox ('Desea Eliminar Este Registro'+
           Chr(13)+'',
          '',mb_YesNo+MB_IconStop) = idYes Then
    Begin
     Temp.SQL.Clear;
     Temp.Sql.Add('Delete from Suplidor where Codigo = :Codigo and Fecha =')+
     Temp.Sql.Add(' :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = :Direccion and Area = :Area and ')+
     Temp.Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');
     Temp.Parameters.ParamByName('Codigo').Value:= EDCodigo.text;
     Temp.Parameters.ParamByName('FECHA').Value:= EDfecha.Text;
     Temp.Parameters.ParamByName('Rnc').Value:= MERnc.text;
     Temp.Parameters.ParamByName('Contacto').Value:= EDContacto.text;
     Temp.Parameters.ParamByName('Direccion').Value:= EDDireccion.text;
     Temp.Parameters.ParamByName('Area').Value:= CBTelefono.text;
     Temp.Parameters.ParamByName('Telefono').Value:= METelefono.text;
     Temp.Parameters.ParamByName('Area1').Value:= CBFax.text;
     Temp.Parameters.ParamByName('Fax').Value:= MEFax.text;
     Temp.Parameters.ParamByName('Termino').Value:= CBterminos.text;
     Temp.Parameters.ParamByName('Limite').Value:= EDLimite.text;
     Temp.Parameters.ParamByName('Email').Value:= EDEmail.text;
     Temp.ExecSQL;
     ShowMessage('Registro Eliminado');
     SuplidorModificar.Enabled := False;
     SuplidorEliminar.Enabled := False;
    End;
end;

cuando corre el error que dice es:

"Statement expected, but espresion of type 'integer' found"

lo marca en la linea:

Código Delphi [-]
Temp.Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');

Que puedo hacer chequea el codigo por favor.

Casimiro Notevi 08-12-2010 14:07:28

Claro, es que has puesto "+" en lugar del punto y coma ';' al final de las líneas.

Código Delphi [-]

Temp.Sql.Add('Delete from Suplidor where Codigo = :Codigo and Fecha =')+     <-------
Temp.Sql.Add(' :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = :Direccion and Area = :Area and ')+     <-------
Temp.Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');

agustin173 08-12-2010 18:52:04

casimiro el programa correr y no da error pero no elimina

los datos permanecen en la base de dato

que hacemos ahora.

microbiano 08-12-2010 19:15:01

prueba asi
 
Código Delphi [-]
with temp do
 begin
     SQL.Clear;
     Sql.Add('Delete from Suplidor');
     sql.add('where Codigo = :Codigo');
     Sql.Add(' and Fecha = :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = ireccion and Area = :Area and ');
     Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');
     Parameters.ParamByName('Codigo').Value:= EDCodigo.text;
     Parameters.ParamByName('FECHA').Value:= EDfecha.Text;
     Parameters.ParamByName('Rnc').Value:= MERnc.text;
     Parameters.ParamByName('Contacto').Value:= trim(EDContacto.text);
     Parameters.ParamByName('Direccion').Value:= trim(EDDireccion.text);
     Parameters.ParamByName('Area').Value:= trim(CBTelefono.text);
     Parameters.ParamByName('Telefono').Value:= trim(METelefono.text);
     Parameters.ParamByName('Area1').Value:= trim(CBFax.text);
     Parameters.ParamByName('Fax').Value:= trim(MEFax.text);
     Parameters.ParamByName('Termino').Value:= trim(CBterminos.text);
     Parameters.ParamByName('Limite').Value:= trim(EDLimite.text);
     Parameters.ParamByName('Email').Value:= trim(EDEmail.text);
     ExecSQL;
     Application.MessageBox('Registro Eliminado con Exito','Registro Eliminado', MB_OK + MB_ICONINFORMATION);
     SuplidorModificar.Enabled := False;
     SuplidorEliminar.Enabled := False;
    End;

ahora la pregunta el campo fecha de que tipo es? y que estas pasando en el Tedit de fecha?

agustin173 08-12-2010 20:12:52

microbiano me dice que el registro fue eliminado pero no esta eliminando

los registros siguen en la base de dato

el campo fecha es tipo date

la fecha se coge del sistema de windows y se guarda como constancia de que fecha fue digitado ese registro.

que podemos hacer para resolver este dilema la aplicacion correr pero no elimina

agustin173 08-12-2010 22:59:49

alguien puede darme una mano por favor con este codigo no me quiere eliminar y no se que hacer

algo debe andar mal en este codigo

Casimiro Notevi 08-12-2010 23:01:52

No conozco ado, pero seguramente te falta confirmar la transacción, applyupdate, commitretaining, etc.

agustin173 08-12-2010 23:29:18

casimiro no entiendo como funciona esas intrucciones que dice puedes explicarme mejor

lo que estoy usando es adoquery

agustin173 08-12-2010 23:31:53

por favor quien me puede ayudar

microbiano 09-12-2010 04:54:57

que tal si pones la estructura de la base de datos
 
hola que tal si pones la estructura para la base de datos. pero prueba con esto haber que onda.

Código Delphi [-]
with temp do
 begin
     SQL.Clear;
     Sql.Add('Delete from Suplidor');
     sql.add('where Codigo = :Codigo');
     Sql.Add(' and Fecha = :Fecha and Rnc = :Rnc and Suplidor = :Suplidor and Contacto = :Contacto and Direccion = ireccion and Area = :Area and ');
     Sql.Add(' Telefono = :Telefono and Area1 = :Area1 and Fax = :Fax and Termino = :Termino and Limite = :Limite and Email = :Email ');
     Parameters.ParamByName('Codigo').Value:= EDCodigo.text;
     Parameters.ParamByName('FECHA').Value:= EDfecha.Text;
     Parameters.ParamByName('Rnc').Value:= MERnc.text;
     Parameters.ParamByName('Contacto').Value:= trim(EDContacto.text);
     Parameters.ParamByName('Direccion').Value:= trim(EDDireccion.text);
     Parameters.ParamByName('Area').Value:= trim(CBTelefono.text);
     Parameters.ParamByName('Telefono').Value:= trim(METelefono.text);
     Parameters.ParamByName('Area1').Value:= trim(CBFax.text);
     Parameters.ParamByName('Fax').Value:= trim(MEFax.text);
     Parameters.ParamByName('Termino').Value:= trim(CBterminos.text);
     Parameters.ParamByName('Limite').Value:= trim(EDLimite.text);
     Parameters.ParamByName('Email').Value:= trim(EDEmail.text);
     try
             ExecSQL;
Application.MessageBox('Registro Eliminado con Exito','Registro Eliminado', MB_OK + MB_ICONINFORMATION);
     SuplidorModificar.Enabled := False;
     SuplidorEliminar.Enabled := False;
       except
        on E:EOleException do
         begin
          MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
         end;
       end;
  
     
    End;


La franja horaria es GMT +2. Ahora son las 15:34:04.

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