Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2009
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
Problema con Modificar Tabla desde Delphi

Hola Amigos de clubcdelphi la verdad es que tengo un problema con la modificacion de una tabla en SQL, tengo un programa que modifica la tabla a traves de un procedimiento almacenado llamado ModificaProductos

la tabla que esta en sql contiene los campos
Codigo de tipo entero,
NombreProducto de tipo varchar y
Cantidad de tipo varchar

por ejemplo

Tabla Productos

Codigo NombreProducto Cantidad
1 fierro 20
2 cobre 30
3 acero 20,7

ok, tengo el procedimiento almacenado que se llama modificaproducto, este procedimiento recibe dos parametros que son el codigo del producto y la cantidad, si lo invoco en SQL server asi modificaproducto 1,'45,8' me cambiaria sin problema la cantidad de fierro por 45,8. Pero cuando lo llamo en delphi de sta forma

Código Delphi [-]
                   CodigoProducto:=StrToInt('1');
                   ValorModificadoProducto:=48,5;
                   
                   Query:='SP_MODIFICA_PRODUCTO '
                            + IntToStr(CodigoProducto) + ','
                            + FloatToStr(ValorModificadoProducto);
                     Q_ModificaProducto.SQL.Clear;
                     Q_ModificaProducto.SQL.Add(query);
                     Q_ModificaProducto.ExecSQL;

me arroja un error por que delphi cree que van mas parametros de los que soporta el procedimiento me explico: si

CodigoProducto = 1 y
ValorModificadoProducto = 45,6

SQL cree que delphi manda el procedimiento de esta forma
ModificaProducto 1,45,6 y si se dan cuenta en vez de haber solos dos parametros sql lo toma como si fuesen 3 el numero 45,6 lo toma como dos parametros y no todo junto como un string no se si me entienden, debido a esto no puedo modificar lso productos por que claro sql me reclama el error


amigos alguien me podria ayudar con el procedimiento para cuando vaya un valor con coma se tome asi ModificaProducto 1,'45,8' y no asi
ModificaProducto 1,45,8. Espero que me hayan entendido intente ser lo mas claro y conciso posible

gracias por todo espero sus respuestas
Ojo: la cantidad la declare como varchar y no como real por que todo el trabajo lo hago en el programa y le retorno un string al campo cantidad, al declararlo como real tenia problema con los puntos y las comas y como no quiero cambiar la configuracion regional por que eso no seria justo con otros programas lo hice asi
Responder Con Cita
  #2  
Antiguo 15-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se me ocurre que manualmente modifiques la cadena antes de enviarla, o si te es últil, cambies los parámetros para toda la aplicación.
En mi caso utilizo un procedimiento similar a este:

Código Delphi [-]
begin
  // Comenzamos
  Application.UpdateFormatSettings := True;
  // Asignamos los nuestros
  SysUtils.DecimalSeparator := CHAR_POINT;
  c := SysUtils.DecimalSeparator;
  SysUtils.ThousandSeparator := CHAR_COMMA;
  c := SysUtils.ThousandSeparator;
  // Acabamos
  Application.UpdateFormatSettings := False;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 15-04-2009
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 22
pcicom Va por buen camino
Los STORE PROCEDURES deben de ser invocados con otro METODO


Código Delphi [-]
  with spMODIFICAPRODUCTO do
  begin
       StoredProcName := 'SP_MODIFICAPRODUCTO'; 
       ParamByName('pCodigoProducto').AsString := sCodigo;
       ParamByName('pValorModificado').AsInteger := nValor;
       ExecProc;
  end;

En lugar de usar el componente QUERY debes de usar un componente STOREPROCEDURE..
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton
Responder Con Cita
  #4  
Antiguo 15-04-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
La recomendación de pcicom me parece es la más adecuada y la que deberías utilizar.

Pero podrías probar:
Código Delphi [-]
Query:='SP_MODIFICA_PRODUCTO '
 + IntToStr(CodigoProducto) + ','
 + QuotedStr(FloatToStr(ValorModificadoProducto));

Insisto, lo que propone pcicom es lo más adecuado.
__________________

Responder Con Cita
  #5  
Antiguo 15-04-2009
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
amigos disculpenme si los hice perder el tiempo, es que a veces la solucion es tan facil y esta ahi mismo pero uno no se imagina como hasta que me di cuenta de una cosa bueno ojala esto e sirva a otra persona para no estar cambiando la configuracion regional

lo que pasa es que la tabla tiene

Codigo de tipo entero,
NombreProducto de tipo varchar y
Cantidad de tipo varchar

la cantidad es de tipo varchar o sea string entonces lo mas logico es que yo al modificar al tabla con los datos listos para enviar, deberia mandar un dato de tipo string no un real convertido a string, si se fijan en el ejemplo que di, desde delphi puse esto:
Código Delphi [-]
                   CodigoProducto:=StrToInt('1');
                   ValorModificadoProducto:=48,5;
                   
                   Query:='SP_MODIFICA_PRODUCTO '
                            + IntToStr(CodigoProducto) + ','
                            + FloatToStr(ValorModificadoProducto);
                     Q_ModificaProducto.SQL.Clear;
                     Q_ModificaProducto.SQL.Add(query);
                     Q_ModificaProducto.ExecSQL;

como ven estoy transformando el valor de un reala un string pero claro me va a reclamar por que le estoy mandando 3 parametros en vez de dos y como sql separa en sus procedimientos por comas esto no poria ser jamas, bueno la solucion era muy facil solo habia que cambiar el FloatToStr(ValorModificadoProducto); por + Chr(39) + ValorModificadoProducto + Chr(39); con esto el digo al procedimiento que todo lo que este entre Chr(39) quede como string ya que Chr(39) es el codigo ascci de el caracter '

bueno deje el procedimiento asi

Código Delphi [-]
Query:='SP_MODIFICA_PRODUCTO '
                            + IntToStr(CodigoProducto) + ','
                            + Chr(39) + ValorModificadoProducto   + Chr(39);
                     Q_ModificaProducto.SQL.Clear;
                     Q_ModificaProducto.SQL.Add(query);
                     Q_ModificaProducto.ExecSQL;

con eso quedaria asi SP_MODIFICA_PRODUCTO 1,'dsdad' ok
eso seria muchas gracias por la ayuda que me dieron, espeor le sirva a alguien eso

gracias a todos ya resolvi el problema
Responder Con Cita
  #6  
Antiguo 15-04-2009
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 22
pcicom Va por buen camino
Al final de cuentas no le veo sentido a que uses store procedures para una modificacion de este tipo ya que lo puedes usar directamente, salvo que tengas mas acciones dentro del STOREPROCEDURE realices mas acciones.

Código SQL [-]

   UPDATE tablaARTICULOS SET valor=Nuevovalor WHERE codigo=xCodigo

que segun tu codigo seria
Código Delphi [-]

CodigoProducto:=StrToInt('1');
                   ValorModificadoProducto:='48,5';
                   
                   Query:='UPDATE tablaARTICULOS SET valor =' +                         + QuotedStr( FloatToStr(ValorModificadoProducto) );
                     Q_ModificaProducto.SQL.Clear;
                     Q_ModificaProducto.SQL.Add(query);
                     Q_ModificaProducto.ExecSQL;

En fin, al final de cuentas siempre se pueden inventar muchos caminos para llegar a ROMA...

Jejeje

SAUDOS..
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton
Responder Con Cita
  #7  
Antiguo 16-04-2009
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
hola no sabia que existia el storedprocedure para ejecutar procedimientos de sql es que la verdad es que me manejo de manera bastante pobre en delphi no asi en java que es mi fuerte y como todo es tan diferente en java a como lo es en delphi y de delphi la verdad no he visto hace bastante tiempo, aun tengo instalada la version 6 y que es la que mas me gusta jejeje pero como aca en el trabajo estan haciendo cosas en delphi me sirvio para recordar este lenguaje, bueno agradezco la ayuda, gracias por los consejos

y si tienes mucha razon hay muchos caminos para llegar a roma

jejjejeeje


saludos

Última edición por Memo6015 fecha: 16-04-2009 a las 02:10:00.
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
Modificar Word (.DOC) desde Delphi Siem Servers 5 15-12-2014 15:25:37
problema con delphi 5 tras modificar el tipo de una columna en una tabla rlago Firebird e Interbase 2 10-11-2006 22:49:40
Modificar campo tabla access desde delphi JuanHC Conexión con bases de datos 3 25-09-2006 13:15:02
Problema al modificar y consultar tabla suppergus Tablas planas 2 17-08-2005 00:55:45
Modificar texto de un pdf desde delphi Masu Varios 1 04-06-2005 16:16:40


La franja horaria es GMT +2. Ahora son las 22:08:51.


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