Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Actualizar Registros (https://www.clubdelphi.com/foros/showthread.php?t=35430)

drkvergil 11-09-2006 00:58:52

Actualizar Registros
 
Hola

Otra vez yo
disculpen pero kisiera saber como se le hace para actualizar un registro en Interbase ya que tengo un aplicacion que primero me pide que le de la tabla q kiero ver depues si kiero hacer una busqueda de algun registro, si lo encuentra se le dda la opcion de poder modificarlo o borrarlo.

Lo del borrado me sale perfecto pero la modificacion no y eske se supone q tengo un IBDataSet que es dond esta la opcion de midifysql y ahi es donde lo pongo pero lo q hago diferente es q despues de q selecciono la tabla ahi intento introducir la sentecnia de modificacion por q obviamente no puedo ponerla desde le principio puesto q no c q tabla poner en al instruccion y por ende tampoco el indice para hacer la actualizacion asi q depues de q me da la tabla inento poner la sentencia q es la siguiente

Código Delphi [-]
  IBDataSetCons.ModifySQL.Clear;
  IBDataSetCons.ModifySQL.add('UPDATE');
  IBDataSetCons.ModifySQL.Add(Tabla);
  IBDataSetCons.ModifySQL.Add('SET');
  IBDataSetCons.ModifySQL.Add(Campos);
  IBDataSetCons.ModifySQL.Add('Where');
  IBDataSetCons.ModifySQL.Add(Index);
  IBDataSetCons.ModifySQL.Add('=:');
  Clavem := 'OLD_'+Index;
  IBDataSetCons.ModifySQL.Add(Clavem);

donde Tabla es el nombre de la tabla q guardo en esta variable con un metodo campos es un string q con otro metodo genero para poner todos los campos que tienen de la siguiente manera: Campo=:Campo,
y asi todos los campos y esa es la variable campos Index es el indice d la tabla q obtengo de la tabla y clavem es, si ven el mismo indice pero modificado para ponerlo asi (OLD_Index) segun yo la sentencia esta bien y depsues selecciono todo de la tabla (osea select * from Tabla) y la activo
pero me manda un error que dice SQL Parse Error: Parameter Name Expected

No se si me falta una instruccion por dar o q pero c que el problema esta en este codigo por q si lo kito o lo comento si me selecciona la base de datos y me y la muestra y si kiero borrar o buscar un registro lo hace pero como kiero modificarlo desde el dbgrid eso es lo q no me deja

por su ayuda y esperando me la puedan otorgar

Gracias

RONPABLO 11-09-2006 04:19:28

Loq pasa es que al hacer el query de actualización le esta diciendo qe va a mandar dos parametros (o eso entiendo)... es decir al final le esta quedando algo así como esto:


Código SQL [-]
    update 
        elNombreDeLaTabla 
    set
        elNombreDelCampo = :primerParametro
    where
        index = :segundoParametro

si ese es el query entonces tiene dos opciones...
la primera construir el query como lo esta haciendo y no mandar parametros... para esto deberá quitar los dos puntos (:)

la segunda es usar los parametros y para esto (y conservando el esquema expusto arriba) deberá agregarle las siguientes lienas antes del select:

Código Delphi [-]
  IBDataSetCons.ParamByName('Campo').asString := valorDeVarCampo;
  IBDataSetCons.ParamByName('oldIndex').asString := valorDeVarOldIndex;

Con esta ultima opcion podrá seguir usando IBDataSetCons con el mismo query y cuando quiera cambiar los valores de campo y de oldIndex solo debera mandarselos como como explique anteriormente.

RONPABLO 11-09-2006 04:21:33

Loq pasa es que al hacer el query de actualización le esta diciendo qe va a mandar dos parametros (o eso entiendo)... es decir al final le esta quedando algo así como esto:


Código SQL [-]
    updata 
        elNombreDeLaTabla 
    set
        elNombreDelCampo = : primerParametro
    where
        index = :segundoParametro

si ese es el query entonces tiene dos opciones...
la primera construir el query como lo esta haciendo y no mandar parametros... para esto deberá quitar los dos puntos ( : )

la segunda es usar los parametros y para esto (y conservando el esquema expusto arriba) deberá agregarle las siguientes lienas antes del select:

Código Delphi [-]
  IBDataSetCons.ParamByName('Campo').asString := valorDeVarCampo;
  IBDataSetCons.ParamByName('oldIndex').asString := valorDeVarOldIndex;

Con esta ultima opcion podrá seguir usando IBDataSetCons con el mismo query y cuando quiera cambiar los valores de campo y de oldIndex solo debera mandarselos como como explique anteriormente.

drkvergil 12-09-2006 18:33:54

Aclaracion
 
Gracias por tu sugerencia

aunque voy a probar como dices deja ver si era asi por q lo q kiero decir es q est query lo hago para poder modificar los datos desd un dbgrid y los dos puntos segun me habian enseñado es paraq indicarle el campo del dbgrid pero si c lo kito creo no me los reconoce, bueno eso digo yo

y el del index es la llave primaria d la tabla y el OLD_ es un prefijo para decirle q cambie ese registro de esa "antigua llave"

y esq ya ves q para modificarlo en el dbgrid para empezar a introducir datos debe haber el query de modifysql antes de activar el dataset (o al menos eso sabia yo) entonces no c si intentando lo q me djist lo logre pero lo voy a intentar..pero si no me explique bien les ruego me digan por q luego hasta yo me hago bolas :o

Pero por su atencion gracias

si tienes otro comentario o sugerencia t ruego me lo hagas llegar por favor


La franja horaria es GMT +2. Ahora son las 14:17:24.

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