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 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Traer un valor de un campo de la Tabla (Access) incluso si esta vacia

Hola

(Iba a colocar esta pregunta en el primer tema que hice, pero lo considero como un tema aparte, asi que...)

¿Como haria para traer un valor de un campo de la BD y que pasaria si este campo estaria vacio?
Por ejemplo: Tengo una Base de Datos la cual contiene varias tablas: Propietarios, Veterinarios, Inspectores, y una llamada Parametros
Tanto los propietarios, como los veterinarios y los inspectores, tienen su respectivo codigo (Codigo_propietario, etc.)
Ahora bien, cuando realizo un alta el codigo a generar para el nuevo propietario, estara almacenado en la tabla Parametros (la cual contiene campos tales como ULTIMO_PROPIETARIO, ULTIMO_VETERINARIO, etc. Y un solo registro en el cual esta almacenado en cada uno de sus campos, el ultimo codigo del tipo de persona a la cual haya cargado en el sistema)
Lo que debo hacer (para hacer un alta de propietario) es traer el valor del campo ULTIMO PROPIETARIO, incrementarlo en 1 (y ese sera el codigo de la persona), cuando grabo los datos en la tabla propietarios, tambien grabo el codigo en la Tabla Parametros.
A todo esto:
Como se escribe una sentencia que permita traerme un dato de una tabla y pasarlo a una variable a partir de un ADOTable?
Responder Con Cita
  #2  
Antiguo 16-06-2013
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 nefore.

Por lo que entiendo tenes una tabla de un solo registro donde se almacenan los últimos identificadores que corresponden a cada tabla, algo como:
Código SQL [-]
CREATE TABLE PARAMETROS(
  ULTIMO_PROPIETARIO INTEGER,
  ULTIMO_VETERINARIO INTEGER,
  etc,
  ...
);

Cita:
Como se escribe una sentencia que permita traerme un dato de una tabla y pasarlo a una variable a partir de un ADOTable?
Te pongo un ejemplo de ingreso, para él mismo, agrega otro TADOTable vinculado a la tabla PARAMETROS.

Suponiendo que el ADOTable vinculado a veterinarios se llama tbVeterinario, el vinculado a parámetros se llama tbParametros y sus campos fueron iniciados a cero, las acciónes básicas a seguir serían:
Código Delphi [-]
...
var
  Ultimo : Integer;
begin
  // Obtener el último ID de veterinario de la tabla "Parametros"
  // incrementarlo en uno y almacenarlo en la variable Ultimo
  Ultimo :=  tbParametros.FieldByName('ULTIMO_VETERINARIO').Value + 1;

  // Agregar un registro en tabla "Veterinarios"
  tbVeterinarios.Insert;
  // Asignarle el ID (Codigo) de veterinario
  tbVeterinarios.FieldByName('Codigo_Veterinario').Value := Ultimo;
  { Asignar los demás valores del veterinario
  ...
  ...
  }
  tbVeterinarios.Post;  // Guardar

  // Actualizar ultimo veterinario en tabla "Parametros"
  tbParametros.Edit;
  tbParametros.FieldByName('ULTIMO_VETERINARIO').Value := Ultimo;
  tbParametros.Post; // Guardar
  ...
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Smile

Vaya, es lo que estaba buscando (en VB 6.0 tenia el Adotable.Columns) y no sabia como hacer algo parecido aca en Delphi. Lo probrare. Muchas gracias por tus respuestas me han ayudado mucho

Última edición por Casimiro Notevi fecha: 16-06-2013 a las 10:26:13.
Responder Con Cita
  #4  
Antiguo 16-06-2013
nefore nefore is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 25
Poder: 0
nefore Va por buen camino
Hola he intentando el codigo que me has puesto, y funciona de maravilla (lo he intentado con el campo (ULTMO_PROPIETARIO) el problema es que al guardar ese valor en el campo parametro, me salta un error pidiendome que le agregue un valor a los demas campos (ULTIMO_INSPECTOR, ULTIMO_VETERINARIO, etc.), me he fijado en la BD de Access y existe una propiedad que dice 'Requerido' (Hacer obligatoria la entrada de este campo') le he puesto que no, pero aun asi, me pide que le ingrese valor a los demas campos.

Código Delphi [-]
procedure TForm5.FormCreate(Sender: TObject);
begin
parametro.conectaBD;
parametro.conectatabla;
if (ADOTable4.FieldByName('ULTIMO_TITULAR').Value <> null) then
  codigo.Text := (IntToStr((ADOTable4.FieldByName('ULTIMO_TITULAR').Value)+1))
else
 codigo.Text:= IntToStr(1);

fecha.Text := DateToStr(Now);
end;

//el siguiente codigo se encuentra cuando en el evento click de un boton para grabar los datos

if bandera then
  begin
    propietario.conectaBD;
    propietario.ConectaTabla(1);
    if (propietario.busqueda(dni.Text,0,2)=True)then
    begin
     ShowMessage('Esta persona ya se encuentra cargada en el sistema');
     dni.SetFocus;
     dni.SelectAll;
     end
    else
    begin
      ADOTable4.Last;
      ADOTable4.Edit;
      ADOTable4.FieldByName('ULTIMO_TITULAR').AsInteger := StrToInt(codigo.Text);
      ADOTable4.Post;
      propietario.Desconectar;
      propietario.grabardatos;
      propietario.Free;
      validacion.Free;
      if MessageDlg('Continuar ingresando datos?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
      then
      begin
        if (ADOTable4.FieldByName('ULTIMO_TITULAR').Value <> null) then
        codigo.Text := (IntToStr((ADOTable4.FieldByName('ULTIMO_TITULAR').Value)+1))
        else
        codigo.Text:= IntToStr(1);
        Limpiar;
      end
      else
      begin
       Close;
       parametro.desconectar;
      end;

    end;
  end;


en donde bandera es una que utilizo para manejar las validaciones (si esta es verdadera significa que las validaciones son correctas), propietario es una clase y el ADOTABLE4 pertenece al AdoTable asociado con la tabla parametros.
Responder Con Cita
  #5  
Antiguo 16-06-2013
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
Cita:
Empezado por nefore Ver Mensaje
Vaya, es lo que estaba buscando (en VB 6.0 tenia el Adotable.Columns) y no sabia como hacer algo parecido aca en Delphi. Lo probrare. Muchas gracias por tus respuestas me han ayudado mucho
Hola nefore.

En Delphi tenes más de una forma de acceder a las columnas de una tabla:
  • El campo persistente. (doble click sobre ADOTable->click derecho->Add fields/Add all fields)
  • La función FieldByName.
  • La propiedad vectorial Fields (mediante el índice de posición de la columna en el TDataSet).
  • La propiedad vectorial FieldValues.

Un ejemplo en que se muestra el valor de un mismo campo de los modos anteriores:
Código Delphi [-]
  with ListBox1.Items do
  begin
    Add(ADOTable1Field1.AsString);  // campo persistente
    Add(ADOTable1.FieldByName('Field1').Value); 
    Add(ADOTable1.Fields[0].AsString);
    Add(ADOTable1.FieldValues['Field1']); //(*)
  end;
(*) FieldValues es la propiedad vectorial por omisión (default), por lo que se puede escribir:
Código Delphi [-]
   ...
   Add(ADOTable1['Field1']);
Al ser un Variant no es necesario especificar el tipo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-06-2013 a las 06:56:10.
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
Añadir registro en tabla firebird si la tabla está vacia jafera Firebird e Interbase 19 22-08-2012 11:59:35
SelectedRows esta vacia Paulao Varios 2 12-03-2009 10:26:07
preguntar por una imagen si esta vacia ingel Gráficos 2 10-05-2007 19:22:14
UPDATE de un campo dependiendo del valor de un campo de otra tabla Javi2 SQL 5 18-04-2005 16:35:05
¿No se puede desactivar un ADOTABLE cuando la tabla está vacia? User_Baja_2 Conexión con bases de datos 1 12-06-2004 18:35:24


La franja horaria es GMT +2. Ahora son las 11:43:52.


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