Ir al contenido


Foto

Como usar el Componente IBUpdateSQL ??


  • Por favor identifícate para responder
10 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 10:30

Hola
Estoy tratando de hacer un Delete de una tabla y me parece que con el componente IBQuey no se puede hacer, al parecer se necesita ligarlo al componente IBUpdateSQL.
Bien, si es asi, entonces como se puede hacer lo siguiente?:
Normalmente uso un query normal para uso temporal y por codigo pongo algo como esto:


delphi
  1. QTemp.SQL.Text := 'Delete * from OrdenProdCompra where Numero = '+ADOTable3Numero.AsString;
  2. QTemp.ExecSQL;



Bien, la pregunta como puedo hacer esto mismo con el componente IBUpdateSQL ???.
Saludos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.459 mensajes
  • LocationMéxico

Escrito 25 mayo 2010 - 10:36

Para esos menesteres los componentes IB tienen un componente de nombre IBDataSet el cual cuenta con las propiedades Insert, Delete, Update, Refresh y Select.

Dale una mirada :)

Salud OS
  • 0

#3 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 mayo 2010 - 12:30

Hola Caral por si optas por el IbDataSet, te comento lo que he descubierto hasta ahora y puede que te ahorre unas horas de busqueda y estudio, seguro que los compañeros te pueden dar más información, pero yo te aporto la que se.

Del IbDataSet los primeros parametroa a rellenar son,
Database // Si el ibtransaction esta conectado te aparecera en Trasaction

En el SelectSQL  la base de datos y los Campos a rellenar

Luego pulsas en el Formulario/Datmodule en el IbDataSet con el boton derecho del raton  y pulsas sobre el Dataset Editor... y te parecera la siguiente imagen


Imagen Enviada


Del apartado Key Fields eliges el campo primario o campo Clave y de updtae Fields eliges los campos que quieres que se actualizen, yo personalmente  pulso sobre Quote Identifiers, por algo que ley de mejor manejo y asegura la integridad de los datos y pulsas luego, sobre el botón Generate SQL y te pasa a la siguienmte pestaña SQL


Imagen Enviada


como podras ver te ha generado los Sql para los Diversos apartados, vete pulsando y veras las diferentes sentencias Sql, ya lo puedes unir mediante unTdataSource a cualquier componente para bases de datos, sin más.


Para usar maestro/ Detalle, (primero tienes que al crear la tabla haberlo preparado con sus indices y demás), lo primero que tendrías que hacer es en el  SelectSQL de la IbdataSet Detalle poner la sentencia  con llamada al campo clave del Maestro En mi caso La tabla Maestro Es FORMULAS y la Detalle es FORMULAS_DESGLOSE y el Campo comun en ambas y además campo Clave es CODIGO_FORMULA, con lo cual sólo tengo que declarar el SelectSQL como



delphi
  1. select * from FORMULAS_DESGLOSE where CODIGO_FORMULA = :CODIGO_FORMULA

, luego hacemos todo lo explicado antes para generar las diferentes sentencias SQL.

Otro Punto interesante es cuando nuestra  tabla tiene generadores y como usarlos, esto se controla de la siguiente manera del
IbdatSet pulsa sobre la propiedad GeneratorField y te aparecerá la siguiente pantalla .


Imagen Enviada



En Generator desplegando el comboBox Generator te aparecerá los generadores que ya tienes creados, en  Field pues el Campo a que afecta y en Increment By el valor de incremento y luego en Apply Event con que evento se activa el generador.

Creo que con esto te explico lo que yo me acuerdo ahora mismo, muy importante y que no se me olvide, ten en cuanta que ante cualquier cambio sobre la estructura de la tabla, tendrás que volver a todo el proceso del Dataset Editor... y volver a generar las sentencias SQL para que te reconozca los cambios, Pues creo que esto es todo, un saludo desde Canarias.





  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 12:39

Hola
Gracias amigos, la explicacion de Jose Luis es muy amplia, gracias amigo.
Aunque por ahora estoy un poco en blanco, tendre que hacer unas pruebas por que no lo entiendo.
Saludos
  • 0

#5 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 mayo 2010 - 01:03

Caral que parte es la que no entiendes y procurare explicártelo mejor, este componente te permite como te comento Egostar las propiedades Insert, Delete, Update, Refresh y Select. Dentro de un sólo componente sin tener que estar modificando sentencias SQL, cada vez que quieres insertar, Editar o borrar un Registro.
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 01:26

Hola
No entiendo amigo nada de nada jejeje.
Es que nunca he hecho estas cosas asi y no capto la esencia del componente.
como dije antes, lo que siempre hago es crear una sentencia por codigo en un query, asi:


delphi
  1. QTemp.SQL.Text := 'Delete * from OrdenProdCompra where Numero = '+ADOTable3Numero.AsString;
  2. QTemp.ExecSQL;



Uso este query temporal y lo reuso las veces que quiero.

Ahora lo que quiero hacer es lo mismo, solo que con el componente que mencionasteis vosotros:


delphi
  1. IBDataSet1.DeleteSQL.Text:='Delete * from OrdenProdCompra where Numero = '+IBQuery2NUMERO.AsString;
  2. IBDataSet1.ExecSQL;



No funciona asi.
Saludos

  • 0

#7 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 mayo 2010 - 01:31

Pues Caral es mas sencillo de lo que tu crees, primero supongamos que el dataSet que esta conectado a tu Ibdataset se llama DS, pues para insertar un nuevo registro podemos usar

DS.Dataset.Insert; o DS.Dataset.append;, personalmente me gusta más este último

Para borrar seria un DS.Dataset.Delete;

Para modificar sería un DS.Dataset.Edit;

Ya que las sentencias SQL necesarias están dentro delos diversos apartados del IbDataset, de hecho puedes poner unDBNavigator, conectar el Datasourse con tu DS, y listo, lo unico que tendrias que controlar es tu Commit o CommitRetaing.
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 01:33

Hola
Y la condicion (where) donde se la pongo?.
Saludos
  • 0

#9 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 mayo 2010 - 01:42

En el SelectSQL, te expongo un Ejemplo de como lo hago


delphi
  1. UBASESDATOS.IBDatasetLotesSalidaMOD.Active:=False;
  2.     UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Clear;
  3.     UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add('select * from LOTES_SALIDA');
  4.     case RadioGroup1.ItemIndex of
  5.       0 :begin  //Buscar por factura
  6.               UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' where (LOTES_SALIDA.TIPO_DOCUMENTO = '+QuotedStr('Factura')+')');
  7.               UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' And ( LOTES_SALIDA.NUMERO_DOCUMENTO = '+QuotedStr(LabeledEdit3.Text)+')');
  8.               SpinButton1.Visible:=True;
  9.           end;
  10.       1 :begin  //Buscar por Albarán
  11.                 UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' where LOTES_SALIDA.TIPO_DOCUMENTO = '+QuotedStr('Albarán'));
  12.                 UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' And ( LOTES_SALIDA.NUMERO_DOCUMENTO = '+QuotedStr(LabeledEdit3.Text)+')');
  13.                 SpinButton1.Visible:=True;
  14.           end;
  15.       2 :begin  //Buscar por Lote
  16.                 UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' where LOTES_SALIDA.LOTE = '+QuotedStr(LabeledEdit3.Text));
  17.                 SpinButton1.Visible:=True;
  18.           end;
  19.       3 :begin  //Buscar por Código de Articulo
  20.                 UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' where  LOTES_SALIDA.CODIGO_PRODUCTO = '+QuotedStr(LabeledEdit3.Text));
  21.                 SpinButton1.Visible:=False;
  22.           end;
  23.       4 :begin  //Buscar por Tipo de Documentos
  24.                 UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add(' where  UPPER(LOTES_SALIDA.TIPO_DOCUMENTO) = UPPER('+QuotedStr(LabeledEdit3.Text)+')');
  25.                 SpinButton1.Visible:=False;
  26.           end;
  27.       5 :begin  //Buscar en Todos los Registros
  28.               //UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add('select * from LOTES_SALIDA');
  29.               SpinButton1.Visible:=False;
  30.           end;
  31.     end;
  32.     case RadioGroup2.ItemIndex of
  33.       0: UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add('ORDER BY LOTES_SALIDA.LOTE');
  34.       1: UBASESDATOS.IBDatasetLotesSalidaMOD.SelectSQL.Add('ORDER BY LOTES_SALIDA.NUMERO_DOCUMENTO');
  35.     end;
  36.     UBASESDATOS.IBDatasetLotesSalidaMOD.Active:=True;
  37.     DataSource1.DataSet.Last;



Aunque cambies los datos Del SelectSQL, el restro delos parametros Funciona Igual.

  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 01:48

Hola
Gracais amigo, lo voy a intentar a ver que pasa.
Saludos
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 mayo 2010 - 02:07

Hola
Como se que soy un cecio y no aprendo a razones lo segui intentando con el query normal ya que el otro lo tendre que aprender en capitulos. :
Bueno, resulta que el query sencillo tambien hace lo que se quiera con el, tal como lo hacen los query de ADO.
Lo que pasaba era una simpleza:

Asi estaba y daba error de sql.


sql
  1. ADOTable3Numero.AsString;



Tenia que ser asi:


sql
  1. ADOTable3NUMERO.AsString;



Simple, el campo esta en mayusculas en la BD y no lo encuentra, eso es lo que creo.
Y eso que tengo el charse iso....1  y el collteno ee-ee----


Creo que lo puedo dar por resuelto a medias jejeje
Gracias amigos y sobre todo Jose Luis.
Saludos


  • 0




IP.Board spam blocked by CleanTalk.