Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como pasar parametros al insert de un ibdataset (https://www.clubdelphi.com/foros/showthread.php?t=69624)

Dens 29-08-2010 21:52:45

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

Caral 29-08-2010 23:31:53

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

Dens 30-08-2010 00:04:25

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.

Casimiro Notevi 30-08-2010 00:27:59

Hola, Dens, bienvenido a clubdelphi, te recomiendo que leas nuestra guía de estilo, así podremos ayudarte mejor, gracias.

Dens 30-08-2010 00:42:09

Ok ya he leido la guia de estilo, supongo que redacte mal el titulo, mil disculpas por las molestias causadas.

Casimiro Notevi 30-08-2010 00:49:02

Cita:

Empezado por Dens (Mensaje 374925)
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 :)

Dens 30-08-2010 01:36:34

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,:producto_codigo,:producto_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

Caral 30-08-2010 01:56:08

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

Casimiro Notevi 30-08-2010 10:11:51

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 :)

Dens 30-08-2010 20:37:01

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.:(


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