Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Mysql, ZeosDB

Buenas, podría alguien explicar que sucede. Tengo un data modulo con los un Tzconection y varios tzquery, al buscar información no he tenido ningún problema, el problema se me presento al intentar modificar el valor de un campo el cual no se modifica. Es la primera ves que utilizo estos componentes.

Datos adicionales:
Delphi 7, ZeosDb
cnprincipal(Tzconection) : los parametros se cargan desde un inifile. (sin problema)
sqlsecuencias(tzquery) : SQL (Select * from tblsecuencias).

Codigo:

Código Delphi [-]
procedure TfrmAdmision.guardar_Datos(tipguard: Integer);
var hc  : string;
    hcn :Integer;
begin
  hcn := 0;
    if tipguard = 1 then     //Nuevo registro
    begin
      //Preguntar si es automatico o manual
      if Application.MessageBox( 'Asignación Número de Historia', 'Desea Asignala Manual', MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
      begin
          //Obtener historia clinica manualmente
          repeat
            InputQuery('Historia Clinica Manual', 'Número de Historial ', hc);
          until ((Trim(hc) <> '') and (StrToInt(hc) > 0));
      end
      else
      begin
        //Obtener secuencia historial clinico automatico
        dmConexiones.sqlSecuencias.Close;
        dmConexiones.sqlSecuencias.Open;                                                  
          dmConexiones.sqlSecuencias.First;                                                
          hcn := dmConexiones.sqlSecuenciasHistoriaClinica.Value + 1;            
          dmConexiones.sqlSecuencias.Edit;
          dmConexiones.sqlSecuenciasHistoriaClinica.Value := hcn;
        dmConexiones.sqlSecuencias.Post;
        dmConexiones.sqlSecuencias.Close;
      end;

      If ((Trim(hc) <> '') and (StrToInt(hc) > 0)) then
        hcn := StrToInt(Trim(hc));

      edthcn.Text := IntToStr(hcn);
    end;

    if tipguard = 2 then     //Datos Modificados
    begin

    end;
end;

El programa no me da ningún error pero no me modifica el registro
Responder Con Cita
  #2  
Antiguo 25-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué sentencia de edición estás usando?
Responder Con Cita
  #3  
Antiguo 25-01-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Desde luego, si le asignas el "Número de Historia" de forma manual, no lo va a cambiar puesto que el edit y el post están en el else.

Un saludo.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #4  
Antiguo 29-01-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Me disculpo por no haber leído el post lo mas rápido posible, pero el caso es el siguiente el la tabla secuencia existe un registro previo con los valores de cada campo inicializado en 0, cada pantalla incrementara el campo correspondiente dependiendo de la actividad (facturas, HCN, deduciones, ND, NC, etc,etc).

Si es nuevo y es manual no debe leer el campo secuencia, de lo contrario si es automático debe leer la tabla secuencia e incrementar el campo HCN en uno y guardar dicho valor. Lo siguiente extraño es que si inicializo la variable hcn a cero siempre, cuando hago varios guardar automático veo que se incrementa pero el la tabla el campo esta en cero.
Responder Con Cita
  #5  
Antiguo 29-01-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
¿Este trozo de código solamente sirve para saber calcular el hcn?

Ahora mismo no veo donde ha de actualizarse el registro.

Por otra parte, en este código:

Código Delphi [-]
     
    dmConexiones.sqlSecuencias.Close;
    dmConexiones.sqlSecuencias.Open;                                                  
    dmConexiones.sqlSecuencias.First;                                                
    hcn := dmConexiones.sqlSecuenciasHistoriaClinica.Value + 1;            
    dmConexiones.sqlSecuencias.Edit;
    dmConexiones.sqlSecuenciasHistoriaClinica.Value := hcn;
    dmConexiones.sqlSecuencias.Post;
    dmConexiones.sqlSecuencias.Close;

No sé si tiene que ser así o no pero veo algo raro. Abres "SqlSecuencias" pero calculas en base a "sqlSecuenciasHistoriaClinica" y lo guardas en "sqlSecuenciasHistoriaClinica". ¿Para qué se abre SqlSecuencias entonces?
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #6  
Antiguo 29-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo no entiendo nada de lo que estás diciendo
Responder Con Cita
  #7  
Antiguo 29-01-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
dmConexiones.sqlSecuencias es el query o conexión a la tabla de secuencias donde se encuentra el campo HistorialClinica el cual es el que me interesa por ahora. Pero para acceder a su valor lo debo hacer completo según entiendo es dmConexiones.sqlSecuenciasHistoriaClinica.Value. Si verificas el dmConexiones.sqlSecuencias.post es para guardar los cambios realizados según se. Reitero nunca haber trabajado con los zeos pero en ADO me funcionan muy bien
Responder Con Cita
  #8  
Antiguo 10-02-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El problema parece estar en que sqlSecuencias es un Query y por lo tanto tiene unsolo SQL asignado.
En este caso el SQL es un 'SELECT ... FROM TABLA'. TZQuery al ser un SELECT solo devuelve valores, pero no sabe como hacer updates, inserts ni deletes. Es un componente que sirve para ejecutar una instrucción en la base de datos.
Supongo que deberías utilizar el componente TZUpdateSQL. Este componente tiene un SQL para cada acción que necesita.

Mira esta web

Cita:
TZUpdateSQL

A TZUpdateSQL object provides statements to modify the data of a result set that is retrieved by a TZQuery object. The TZUpdateSQL component is comparable to BDE's TUpdateSQL component. Here is an example how to define the statements of an SQL statement with corresponding update statements (based on a dialect 3 database):

SQL.Sql:

SELECT * FROM names

UpdateSQL.InsertSql:

INSERT INTO names (recno, name)
VALUES (:recno, :name)

UpdateSQL.ModifySql:

UPDATE names
SET recno = :RecNo,
name = :name
WHERE recno = ld_recno

UpdateSQL.DeleteSql:

DELETE FROM names
WHERE recno = ld_recno



The "OLD_" parameter prefix for SQL statements

The "old_" prefix is handled according to the handling with BDE components. By using "OLD_" as prefix for a fieldname you are able to access the value of the field before it was changed. This is very helpful if you have to compare fieldvalues in a WHERE clause.


Queries with read only resultsets

In geneal a TZUpdateSQL object is assigned to a TZQuery object that has a read only resultset. This makes it possible to change its data. Such read only queries are queries that join multiple tables. But also with "normal" "RequestLive" resultsets you may use TZUpdateSQL (see: TZQuery).
Responder Con Cita
  #9  
Antiguo 11-02-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Ok ya entiendo duilioisola, voy a probar
Responder Con Cita
  #10  
Antiguo 12-02-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
La belleza de ZeosDB es que te permite hacer esto:
Código Delphi [-]
  TZQuery.SQL.Add('SELECT * FROM REGISTROS WHERE CLAVE=:CLAVE');
  TZQery.ParambyName('CLAVE').AsInteger := 1;
  TZQuery.Open;
  TZQuery.Edit;
  TZQuery.FieldBYName('NOMBRE').AsString := 'NUEVO NOMBRE';
  TZQuery.Post;
  TZQuery.Close;

Yo quitaría eso de asignación de secuecina manual y se lo dejo a MySQL con un campo autoincrementado, no veo la utilidad de darle al usuario la potestad de poder decidir que número siguen en la secuencia cuando lo que necesitas es un número único por cada historia clínica. Creo que en todo caso falta revisar el model de BD que hiciste.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #11  
Antiguo 12-02-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Gracias por la ayuda AzidRain, pero es una tabla donde estaran todas las secuencias para todos los documentos, y configuraciones que necesiten, como el caso del IVA, etc
Responder Con Cita
  #12  
Antiguo 12-02-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Es lo mismo que te mencionaba, no necesitas tener una tabla para guardar en que numero va cada documento. Aparte de impráctico corres el riesgo de que si no diseñaste bien la BD, termines con folios desfasados.

Te recomiendo colocar un campo intenger sin signo tipo autoincrementando en todas las tablas que requieran tener un número consecutivo para identificar cada registro. Además así es más fácil de mantener las relaciones entre tablas. Y no tienes que hacer nada en tu código ya que MySQL se encargará de ir generando los numeros de forma automática.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #13  
Antiguo 15-02-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Ok, entendí tu idea ... pero a veces no es que uno quiera si no lo que le pidan, simplemente estoy codificando las ideas de una persona no fui yo quien diseño los modelos de las DB y asi me las pasaron con los diseños de como serian cada pantalla... pero hablare a ver que me dicen. Muchas gracias por molestarte en contestar y a todos aquellos que de una u otra forma han ayudado.
Responder Con Cita
  #14  
Antiguo 18-02-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Cita:
Empezado por ozsWizzard Ver Mensaje
¿Este trozo de código solamente sirve para saber calcular el hcn?

Ahora mismo no veo donde ha de actualizarse el registro.

Por otra parte, en este código:

Código Delphi [-]
     
    dmConexiones.sqlSecuencias.Close;
    dmConexiones.sqlSecuencias.Open;                                                  
    dmConexiones.sqlSecuencias.First;                                                
    hcn := dmConexiones.sqlSecuenciasHistoriaClinica.Value + 1;            
    dmConexiones.sqlSecuencias.Edit;
    dmConexiones.sqlSecuenciasHistoriaClinica.Value := hcn;
    dmConexiones.sqlSecuencias.Post;
    dmConexiones.sqlSecuencias.Close;

No sé si tiene que ser así o no pero veo algo raro. Abres "SqlSecuencias" pero calculas en base a "sqlSecuenciasHistoriaClinica" y lo guardas en "sqlSecuenciasHistoriaClinica". ¿Para qué se abre SqlSecuencias entonces?
Cita:
Yo no entiendo nada de lo que estás diciendo
Me estoy releyendo y la verdad es que tienes razón. Las prisas y el intentar no ofender fueron una mala combinación.

Lo que realmente quería decir es que creía que había un error a la hora de usar los querys pero no quería tirarme mucho al agua.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #15  
Antiguo 18-02-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
La belleza de ZeosDB es que te permite hacer esto:
Código Delphi [-]
  TZQuery.SQL.Add('SELECT * FROM REGISTROS WHERE CLAVE=:CLAVE');
  TZQery.ParambyName('CLAVE').AsInteger := 1;
  TZQuery.Open;
  TZQuery.Edit;
  TZQuery.FieldBYName('NOMBRE').AsString := 'NUEVO NOMBRE';
  TZQuery.Post;
  TZQuery.Close;
.
Si TZQuery es el nombre del objeto, ¿qué diferencia hay con ADO o DBExpres?, yo eso mismo lo tengo hecho con ambos. A menos que TZQuery sea el nombre de la clase y no tengas instanciado el objeto, en cuyo caso más que una ventaja lo vería como una aberración.

Un saludo
__________________
La Madurez se llama...
~~~Gaia~~~
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
Copiar "Algunos" Campos de una Tabla a otra - ZEOSDB Sqlite martini002 Conexión con bases de datos 6 21-08-2012 01:46:41
ZeosDB con MySql 5.1 franroju Conexión con bases de datos 1 24-05-2012 15:21:39
Sincronizar BD MySQL Hosting con BD MySQL servidor local ivantech MySQL 3 09-03-2010 19:01:07
ZeosDB daly Conexión con bases de datos 2 07-10-2005 16:16:38
como conectarme remotamente mysql a mysql sakuragi MySQL 14 11-11-2004 15:04:46


La franja horaria es GMT +2. Ahora son las 07:11: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
Copyright 1996-2007 Club Delphi