Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Insertar registros desde Ibquery (https://www.clubdelphi.com/foros/showthread.php?t=76681)

MartinS 17-11-2011 21:13:49

Insertar registros desde Ibquery
 
Hola gente:
La idea es ir dejando paulatinamente el uso de IBtable para el alta de registros. Lo que necesito es que me orienten en cuanto a la instruccion SQL para hacer tal operacion.
La base de datos es Firebird. Por ejemplo si tengo una tabla de cliente con algunos campos como para orientar (CtaCte, Apellido, Nombre, Domicilio, Etc.) que componentes uso para cargar los datos (Dbedit o Edit) y como se asigna ese valor del componente en la instruccion SQL.

Gracias de antemano.-

oscarac 17-11-2011 21:17:44

yo tengo un catalogo de clientes, el cual obtengo con un query

y lo que me funciona es hacer el edit, post, delete al mismo query, asl ser "vivo" actualizara la data en la tabla
lo que quiero decirte es que funciona igual (al menos para mi), ya sea en tabla o en query

marcoszorrilla 17-11-2011 21:25:35

Creo que lo más apropiado sería utilizar un componente IbDataSet le das el SQL para que cargue los datos mediante un asistente y puedes generar automáticamente su comportamiento ante una instrucción Delete, Update, Insert...

Un Saludo.

MartinS 17-11-2011 21:49:18

Gracias por la prontitud en la respuesta. Hasta ahi entiendo. Mi problema radica en dos puntos.

Primero que no se como asociar por SQL del Ibquery un valor que doy entrada por un TEdit a la base de datos (Se que la instruccion es insert to pero no se como usarla) y tambien que se usan parametros indicando los campos que tampoco he manejado nunca.

Segundo no tengo ni idea como usar el Ibdataset. Esta bueno porque aparecen todas las operaciones que necesita la base de datos pero no se como asignarle los campos y su enlace con los componentes de edición ...

ecfisa 17-11-2011 21:57:07

Hola.

Cien por ciento de acuerdo con Marcos. El TIBDataSet es tan eficiente como un TIBQuery y más sencillo de usar que ella en inserciones y modificaciones.

Pero si prefieres hacer la inserción mediante una consulta, sería algo así:
Código Delphi [-]
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO CLIENTES(CTACTE, APELLIDO, NOMBRE, DOMICILIO)');
    SQL.Add('VALUES(:CTACTE, :APELLIDO, :NOMBRE, :DOMICILIO)');
    ParamByName('CTACTE').AsString:= '0000000001';
    ParamByName('APELLIDO').AsString:= ComboBox1.Text;
    ParamByName('NOMBRE').AsString:= Edit1.Text;
    ParamByName('DOMICILIO').AsString:= FDomicilio;
    ExecSQL;
  end;
Ejemplifiqué las asignaciones a parámetros mediante una constante, dos propiedades y la última con una variable para darte una mejor idea.

Saludos.

oscarac 17-11-2011 22:02:00

Cita:

Empezado por MartinS (Mensaje 418773)
Gracias por la prontitud en la respuesta. Hasta ahi entiendo. Mi problema radica en dos puntos.

Primero que no se como asociar por SQL del Ibquery un valor que doy entrada por un TEdit a la base de datos (Se que la instruccion es insert to pero no se como usarla) y tambien que se usan parametros indicando los campos que tampoco he manejado nunca.

Segundo no tengo ni idea como usar el Ibdataset. Esta bueno porque aparecen todas las operaciones que necesita la base de datos pero no se como asignarle los campos y su enlace con los componentes de edición ...

me parece que en lugar del EDIt deberias usar DBEDIT, solo es cuestion de asociar el datasource del query a los dbedist y puedas realizar las operaciones normales (append, edit, delete)

MartinS 17-11-2011 22:04:20

Gracias gente.... a eso me referia. La santa instruccion en SQL para agregar registros...
A modo de informacion, hace un mes y algo que empece con Firebird y si bien no parece dificil el acostumbrarse a dejar las bases de escritorio suele ser complicado... Gracias nuevamente.

Casimiro Notevi 17-11-2011 22:09:14

Mira este tutorial del compañero Caral.

ecfisa 17-11-2011 22:09:44

Cita:

Segundo no tengo ni idea como usar el Ibdataset.
Es muy sencillo, estando seleccionado el TIBDataSet:

Desde el Object Inspector:
  • Asignar la propiedad Database.
  • Click sobre los (...) de la propiedad SelectSQL -> doble click para seleccionar la tabla (genera cuasi consulta) -> seleccionar el/los campos -> click en Add Field to SQL -> Ok ( o escribí la consulta manualmente )
  • Posicionado sobre el componente TIBDataSet, click derecho del mouse -> DataSet Editor -> Select Primary Keys (seleccionala/s) -> Generate SQL -> Ok.
Y si no me olvidé de nada... Eso es todo :)

Saludos.

Edito: Ya sabía que de algo me olvidaba... Muy buena la sugerencia de Casimiro. ;) (que no había visto mientras escribía) :)

MartinS 17-11-2011 22:38:17

Ok. Estuve probando y esta bueno, practico y rapido. Ahora debo crear un Ibdataset para cada tabla o puedo incorporar todas la tablas en el mismo.
y abusando de vuestra sabiduria. Cuando doy de alta a un registro por ejemplo como ejecuto la sentencia escrita en insertSql??

Casimiro Notevi 17-11-2011 22:44:10

Cita:

Empezado por MartinS (Mensaje 418788)
Ok. Estuve probando y esta bueno, practico y rapido. Ahora debo crear un Ibdataset para cada tabla o puedo incorporar todas la tablas en el mismo.
y abusando de vuestra sabiduria. Cuando doy de alta a un registro por ejemplo como ejecuto la sentencia escrita en insertSql??

Para empezar, olvida la forma de trabajar con "tablas", debes pensar en "consultas":
Que estás buscando el nombre, teléfono y dirección de un cliente por su código, entonces:
Código SQL [-]
select nombre, telefono, direccion from tbclientes where codigo= :sucodigo
Que estás buscando el precio de venta de un artículo:
Código SQL [-]
select precioventa por tbarticulos where codigoarticulo= :sucodigo
etc.
etc.
¡¡¡Pero olvida las tablas!!!. un componente tabla es lo mismo que:
Código SQL [-]
select * from latabla"
, un derroche total e innecesario

Y por favor, preguntas distintas en hilos distintos, sigue nuestra guía de estilo, gracias.
Aunque en el tutorial que te he indicado antes tienes la respuesta a tu pregunta y muchas más.

MartinS 17-11-2011 22:50:49

Gracias casimiro. No me retes Jaja.. El instructivo del amigo caral ya lo habia utilizado para crear la base y demas. Lo que pretendia es si con la sentencia

Código Delphi [-]
ibDataset1.Post

se logra la ejecucion de los escrito en la propiedad InsertSQL del Dataset.


La franja horaria es GMT +2. Ahora son las 10:42:20.

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