Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me alegro que lo resolvieras.
Solo para que te des una idea de como lo hago yo:
Código Delphi [-]
 DataModule1.AC1.BeginTrans;
      try
         If Nueva then
         QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+')'
         else
         QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
         Nueva := False;
         QOrdProd.Close;
         QOrdProd.Open;
       except
         on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #2  
Antiguo 08-10-2008
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino


Talvez dentro de algunos 30 años yo este a ese nivel
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #3  
Antiguo 08-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Que va, no te subestimes, el mas Novato aqui soy yo, con solo un par de años en esto.
Pronto harás cosas de verdad, mucho mejor que estas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 04-03-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Me alegro que lo resolvieras.
Solo para que te des una idea de como lo hago yo:
Código Delphi [-]
 DataModule1.AC1.BeginTrans;
      try
         If Nueva then
         QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+')'
         else
         QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
         Nueva := False;
         QOrdProd.Close;
         QOrdProd.Open;
       except
         on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
end;
Saludos
Estimado, me podrias explicar para que usar el Recuery y por que para cuando actualizas usas esos parámetros?
Gracias !!
Responder Con Cita
  #5  
Antiguo 04-03-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por koalasoft Ver Mensaje
Estimado, me podrias explicar para que usar el Recuery ...
Ví que en otro hilo consultaste sobre la funcionalidad del método Requery, espero que esta traducción de la ayuda de Delphi conteste tu duda:
Cita:
...
Llame a Requery para actualizar el conjunto de registros. Requery actualiza el conjunto de datos al volver a ejecutar el comando original o la instrucción SQL que produjo el conjunto de registros.

Los efectos de Requery son los mismos que llaman el método Close del dataset y luego su método Open. Sin embargo, hay circunstancias en las que un medio de actualizar el conjunto de registros es mejor que el otro. Los valores en propiedades como CursorLocation, CursorType y LockType no se pueden cambiar mientras el conjunto de datos está abierto, por lo que Requery sólo puede actualizar el conjunto de registros utilizando los valores existentes en estas propiedades. Para actualizar el conjunto de registros utilizando valores diferentes para estas propiedades, efectúe la actualización mediante los métodos Close y Open.
...
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-03-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Ví que en otro hilo consultaste sobre la funcionalidad del método Requery, espero que esta traducción de la ayuda de Delphi conteste tu duda:


Saludos
Muchas gracias estimado ..

Mi pregunta relacionado a esto fue que he intentado que mi procedimiento para actualizar un registro lo hace bien, puesto que al intentar actualizar me sale el siguiente mensaje:

---------------------------
Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message 'No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Te comento rapido, antes mi base de datos mysql (mariadb) estaba en un servidor Windows, por necesidades exporte la base de datos ahora a un servidor Linux, al querer usar el sistema nuevamente me aparece este mensaje al querer actualizar un registro, cosa que antes en el anterior servidor no lo hacia.

Mi codigo de actualización es el siguiente:

Código:
with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM ONTs ');
    SQL.Add('WHERE MAC_ONT LIKE ' +quotedstr('%' + Edit1.Text + '%')+' ');
    Open;
  if isEmpty Then
    begin
	AdoQuery1.Close;            // cierro la tabla.
	AdoQuery1.Open;             // abro la Tabla
	msError('No se encuentra registrado, Favor verifica los datos.','ERROR: ID MAC');
        ADOQuery1.Active := False;
	Edit1.SetFocus;
    exit;
  End
  Else   // En caso de Si haber un resultado
   Begin
    If MessageDlg('¿Está seguro que desea ACTUALIZAR el registro? ',mtConfirmation,[mbYes,mbNo],0) = mrYes then
      begin
      Alta_ONT.Cursor:= crSQLWait;
	    DMod1.ADOConnection1.BeginTrans;   // Inicio la Transacción
       try
       ADOQuery1.Edit;           // Editar la Tabla
       ADOQuery1.FieldByName('MOD_ONT').AsString := ComboBox1.Text;
       ADOQuery1.FieldByName('SERIE_ONT').AsString := Edit2.Text;
       ADOQuery1.FieldByName('PON_ONT').AsString := Edit3.Text;
       ADOQuery1.FieldByName('ONT_S').AsString := Edit4.Text;
       ADOQuery1.FieldByName('SSID_ONT').AsString := Edit5.Text;
       ADOQuery1.FieldByName('KEYWIFI_ONT').AsString := Edit6.Text;
       ADOQuery1.FieldByName('IP_ONT').AsString := Edit7.Text;
       ADOQuery1.FieldByName('ESTATUS_ONT').AsString := ComboBox2.Text;
       ADOQuery1.Post;            // Guardo Datos;

       if DMod1.ADOConnection1.InTransaction then
       Begin
        DMod1.AdoConnection1.CommitTrans; // actualizo la BD
        AdoQuery1.Close;            // cierro la tabla.
	AdoQuery1.Open;             // abro la Tabla
        Alta_ONT.Cursor:= crDefault;
	      MSG:='EL Registro ONU [MAC: '+ Edit1.Text + ' - MODELO: ' + ComboBox1.Text + ' - SERIE: '+ Edit2.Text +' - ONT/s: ' + Edit4.Text + ' ] - SE MODIFICO/ACTUALIZO Satisfactoriamente';
	      Application.MessageBox(PChar(MSG), 'Atención',MB_ICONINFORMATION );
	      LimpiarCampos([Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,ComboBox1,Combobox2]);
              DesactivarCampos([Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,ComboBox1,Combobox2]);
		    // -- Inicio Botones
	      CargarBotonesInicio;
		    // -- Fin Botones
              Alta_ONT.Cursor:= crDefault;
              ADOQuery1.Active := False;
	      bnuevo.SetFocus;
       End;
		except
			on E:Exception do      // Si hay Error de Conexión
			begin
				DMod1.AdoConnection1.RollbackTrans;
                                Alta_ONT.Cursor:= crDefault;
                                ADOQuery1.Active := False;
                                MSG:='Ocurrió un error al guardar los datos: ' + E.Message;
				Application.MessageBox(PChar(MSG),'ERROR !!!', MB_ICONSTOP );
				Abort;
				exit;
			end;  // on
       End; // try
	   End
		Else
		  Begin
			AdoQuery1.Close;            // cierro la tabla.
			AdoQuery1.Open;             // abro la Tabla
			Alta_ONT.Cursor:= crDefault;
                        ADOQuery1.Active := False;
			msInfo('¡CANCELADO POR EL USUARIO!.','Atención Proceso Cancelado..');
                        BCancelar.SetFocus;
			exit;
		  End;
   End;
Responder Con Cita
  #7  
Antiguo 04-03-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por koalasoft Ver Mensaje
Mi pregunta relacionado a esto fue que he intentado que mi procedimiento para actualizar un registro lo hace bien, puesto que al intentar actualizar me sale el siguiente mensaje:

---------------------------
Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message 'No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Te comento rapido, antes mi base de datos mysql (mariadb) estaba en un servidor Windows, por necesidades exporte la base de datos ahora a un servidor Linux, al querer usar el sistema nuevamente me aparece este mensaje al querer actualizar un registro, cosa que antes en el anterior servidor no lo hacia.
Entiendo entonces, que tu programa funcionaba bién hasta que realizaste el cambio. Revisa en estos enlaces donde se menciona dicho error a ver si alguno de los casos se corresponde con el tuyo o te orienta al respecto:
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
actualizacion del help 129 zidfrid C++ Builder 0 13-08-2007 00:22:56
Actualizacion principiante22 Internet 2 09-07-2007 16:36:55
Actualización con SQL luxus Conexión con bases de datos 4 08-07-2006 16:23:24
Actualizacion con ADO Carlex Conexión con bases de datos 5 09-08-2005 08:08:57
actualizacion en red @-Soft Conexión con bases de datos 1 12-08-2003 09:55:06


La franja horaria es GMT +2. Ahora son las 21:21:37.


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