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 29-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Como pasar parametros al insert de un ibdataset

Buenas tardes, soy nuevo en este foro, me gustaria saber si alguien me puede ayudar con el siguiente problemita que tengo.
Estoy creando una aplicacion en delphi con firebird 2.0 y me he trancado al intentar pasarle parametros a el insert del ibdataset
me explico:
Uso un dbgrid para mostrar crear y modificar seriales de productos que pertenecen a una compra realizada, es decir principalmente el dataset hace un este select
select CORRELATIVO, PRODUCTO_CODIGO, PRODUCTO_NOMBRE, SERIAL, ESTADO from SERIALES_PRODUCTOS where documento=:var1
donde :var1 es el parametro que me vinculara la tabla "seriales_productos" con la tabla "compra_detalle", la idea es que si de un producto se compran 5 unidades se registren 5 seriales ni mas ni menos.

Disculpen lo largo, solo quiero ser explicito.
El problema radica en que al hacer el insert necesito definirle parametros y lo hago de este modo:

IBDataSet1.Close;
IBDataSet1.Params.ByName('correlativo').Value:='334'; "por decir un valor"
IBDataSet1.Open;

me da el sigiente error
EIBClientError with message "Field" 'correlativo' not fund. process stopped.

NO entiendo a que viene ese error si de porsi el dataset genera el insert con parametros.


insert into SERIALES_PRODUCTOS
(CORRELATIVO, PRODUCTO_CODIGO, PRODUCTO_NOMBRE, SERIAL, ESTADO)
values
(:CORRELATIVO, :PRODUCTO_CODIGO, :PRODUCTO_NOMBRE, :SERIAL,
:ESTADO)



Muchas gracias de antemano
Responder Con Cita
  #2  
Antiguo 29-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Trata asi:
Código Delphi [-]
IBDataSet1.Close; 
IBDataSet1.Params[0].Value := '334'; "por decir un valor"
IBDataSet1.Open;
Ahora:
Al estar el numero 334 entre comillas quiere decir que el dato sera string, si es numerico no coloques las comillas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 30-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Hola caral gracias por responder, te cuento que me da el siguiente error

EIBClientError with message xsqlda index out of range .Process stopped ...

Gracias por tu respuesta hermano.
Responder Con Cita
  #4  
Antiguo 30-08-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, Dens, bienvenido a clubdelphi, te recomiendo que leas nuestra guía de estilo, así podremos ayudarte mejor, gracias.
Responder Con Cita
  #5  
Antiguo 30-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Ok ya he leido la guia de estilo, supongo que redacte mal el titulo, mil disculpas por las molestias causadas.
Responder Con Cita
  #6  
Antiguo 30-08-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Dens Ver Mensaje
Ok ya he leido la guia de estilo, supongo que redacte mal el titulo, mil disculpas por las molestias causadas.
No, no es por eso, amigo

Es para que expliques en detalle qué haces para que salga este error que comentas:
Cita:
Empezado por Dens
Hola caral gracias por responder, te cuento que me da el siguiente error
EIBClientError with message xsqlda index out of range .Process stopped .
Tal y como dice la guía de estilo, que expliques lo más detalladamente posible todo el proceso, sistema, base de datos, componentes, tipos, sentencias sql, etc. en fin, todo lo que éstas implican en lo que estás haciendo.
De esa manera será más fácil ayudarte, porque de esa manera sólo podemos "aventurar" a suponer qué puede ser el problema.

Por ejemplo, en teoría se supone que ese error es porque estás indicando un índice de parámetro que no existe, que ocurriría cuando tienes un sólo parámetro y sin embargo indicas el índice [3] (por ejemplo).
Pues eso, que sólo podemos aventurarnos a suponer, pero si nos explicas mejor en detalle... será más fácil acertar con la solución a tu duda
Responder Con Cita
  #7  
Antiguo 30-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
upss casimiro disculpa mi lentitud es que cuando naci me le resbale de las manos al doctor y sin querer me piso.XD

Bueno el asunto es el siguiente tengo la tabla seriales_productos con los campos:
correlativo_principal (key),
correlativo(que relaciona esta tabla con la tabla compras_detalle)
producto_codigo,
producto_nombre,
serial,
estado(si esta activo o no activo).



Tratare de ser hechar el cuento bien: Una empresa lleva sus procedimientos administrativos en un sistema A (propietario) que se distribuye en venezuela. Este sistema utiliza firebird 2.0 como base de datos.
Yo estoy realizando una aplicacion B que genere seriales para los productos por compra realizada, es decir, el departamento de compras registra una "compra" en el sistema A, el sistema B consulta la tabla compras, selecciona la compra realizada consulta los registros de la tabla compra_detalle de esa compra, y a cada producto se le debe de generar tantos seriales como cantidad de productos que se esten comprando, ejem: si son 6 camizetas , hay que generar 6 seriales.
Ya yo he realizado el form de la tabla compras, el de la tabla compra_detalle y he estado tratando de hacer un dbgrid para insertarle los seriales a la tabla seriales_productos.

Cree un form con un Dbgrid y a su vez un dataset y datasource conectados a ibatransaction y al ibdatabase. En el dataset hago el select a seriales_productos pasandole como parametro el correlativo de la compra asi

Código SQL [-]

select CORRELATIVO_PRINCIPAL, CORRELATIVO, PRODUCTO_CODIGO,  PRODUCTO_NOMBRE, SERIAL, ESTADO from SERIALES_PRODUCTOS where  correlativo=:correlativo

esto lo coloque en ibdataset click derecho-> edit sql
y en el load del form le doy valor al parametro

IBDataSet1.Close;
ibdataset1.ParamByName('correlativo').Value:="93838" "por decir un valor"
IBDataSet1.Open;

hasta aqui funciona perfectamente
Luego ingreso en cliclk derecho ibdataset-> dataset editor
en select primary key selecciono la clave primaria y hago click en generate sql.

y genera esto en insert

insert into SERIALES_PRODUCTOS
(CORRELATIVO, PRODUCTO_CODIGO, PRODUCTO_NOMBRE, SERIAL, ESTADO)
values
(:CORRELATIVO, :PRODUCTO_CODIGO, :PRODUCTO_NOMBRE, :SERIAL,
:ESTADO)

El problema es el siguiente : Yo no quiero darle valores a
:correlativo,roducto_codigo,roducto_nombre,:serial,:estado
Mediante el dbgrid me gustaria darselos asi

IBDataSet1.Close;
ibdataset1.ParamByName('correlativo').Value:="93838" "por decir un valor"
ibdataset1.ParamByName('Producto_codigo').Value:="93838" "por decir un valor"
IBDataSet1.Open; etc....

Pero ahi es cuando me da el error

EIBClientError with message "Field" 'correlativo' not fund. process stopped.

Es decir para La consulta select en sql editor no meda ese error ahi si puedo definir tantos parametros quiera pero para el insert el update y el delete de dataset editor no me reconoce ni un parametro

De verdad espero haber podido explicarme bien , disculpen lo largo de mi explicacion gracias
Responder Con Cita
  #8  
Antiguo 30-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo aqui no puedo ayudar mucho por que no uso los IBDataSet, no me gustan, muy probablemente por que no los entiendo.
Yo hago las cosas directamente sobre los IBQuery, me es mas cómodo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 30-08-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Aquí se puede descargar un sencillo documento en pdf, escrito por el amigo Eliseo González (egostar), verás lo sencillo, útil y cómodo que resulta usar los IBDataSet
Responder Con Cita
  #10  
Antiguo 30-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Hola casimiro, gracias por tu ayuda. BUeno justamente lo que dice ese manual son los conocimientos que tengo respecto al problema, he buscado la manera de darle solucion pero hasta ahora no he encontrado nada.
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
Pasar Componentes como parámetros Antonioveneroso C++ Builder 5 26-02-2008 19:48:58
Dudas sobre un insert en un ibdataset IVAND Firebird e Interbase 0 09-10-2007 15:18:49
Cómo pasar los parámetros? dunia_lv Impresión 0 15-04-2005 16:26:42
Pasar parametros a IBdataSet digital Firebird e Interbase 3 13-07-2004 08:39:11
como pasar parametros... hook SQL 13 11-05-2004 19:24:14


La franja horaria es GMT +2. Ahora son las 03:15: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