PDA

Ver la Versión Completa : Abrir tabla desde Funtion


rolando_s
28-10-2003, 18:01:02
Trato de abrir una tatabla dentro de un funtion me dice
'undeclared identifier table1.´'
si trato fuera de la funtion funciona
donde declaro o que me falta
Gracias :confused:

roman
28-10-2003, 18:08:45
Si la tabla es una componente que agregaste al formulario entonces sólo puedes acceder a ella desde el formulario, esto es, desde funciones o procedimientos (métodos) del mismo formulario.

Supongo que en tu caso, la función que mencionas está declarada independientemente del formulario.

Una solución para esto-- usar la tabla desde una función [i]que no pertenzeca al formulario[i] -- es agregar a la función un parámetro de tipo TTable:


function MiFuncion(Table: TTable; [i]más parámetros);
begin
{
Aquí puedes usar Table
}
end;


que le asignas al momento de llamar la función:

MiFuncion(Table1);

// Saludos

rolando_s
28-10-2003, 18:50:39
Posteado originalmente por roman
Si la tabla es una componente que agregaste al formulario entonces sólo puedes acceder a ella desde el formulario, esto es, desde funciones o procedimientos (métodos) del mismo formulario.

Supongo que en tu caso, la función que mencionas está declarada independientemente del formulario.

Una solución para esto-- usar la tabla desde una función [i]que no pertenzeca al formulario[i] -- es agregar a la función un parámetro de tipo TTable:


function MiFuncion(Table: TTable; [i]más parámetros);
begin
{
Aquí puedes usar Table
}
end;


solo tengo 1 form, una tabla pardox7 en el form estan los compomentes datasounce1 table1
si table1.open; desde un boton ok
si lo llamo dentro de una de las funciones de este formulario alega que no esta declarado
lo que quiero es solo tomar un dato de la tabla en este puto
no crear un funcin para manipular la tabla


que le asignas al momento de llamar la función:

MiFuncion(Table1);

// Saludos

Viet
28-10-2003, 19:00:30
Por que no nos muestras la declaracion y la funcion asi vemos que puede ser?

roman
28-10-2003, 19:00:49
Posteado originalmente por rolando_s
solo tengo 1 form, una tabla pardox7 en el form estan los compomentes datasounce1 table1
si table1.open; desde un boton ok
si lo llamo dentro de una de las funciones de este formulario alega que no esta declarado
lo que quiero es solo tomar un dato de la tabla en este puto
no crear un funcin para manipular la tabla


Entonces no debería haber ningún problema. Asegúrate de haber declarado la función "dentro" del formulario:


TForm1 = class(TForm)

public { o private}
function TuFuncion: Tipo;
end;


y de anteponer la clase del formulario en la implementación de la función:


function TForm1.TuFuncion: Tipo;
begin
end;


// Saludos

rolando_s
28-10-2003, 20:24:30
Posteado originalmente por roman
Entonces no debería haber ningún problema. Asegúrate de haber declarado la función "dentro" del formulario:


TForm1 = class(TForm)

public { o private}
function TuFuncion: Tipo;
end;


y de anteponer la clase del formulario en la implementación de la función:


function TForm1.TuFuncion: Tipo;
begin
end;


la funcion es funcionando OK sin la tabla dentro
Los llamados a la tabla fuera de la funcion ok

pero dentro de la funcion no


type
Treg = Record
Fecha, horario:TDateTime;
Ano, Mes, Dia, Hora, Minuto, Segundo, MSegundo :Word;
Hora_c, Dia_c, existe : String;

Function Horarios: Treg;
var
H: TReg;
DateTime : TDateTime;
begin
DateTime := Time;
//etc etc
end;

procedure TTiempo.botonClick(Sender: TObject);
begin
Table1.Open;
//
// leer un un dat para comparar con el resto si lo ago dentro de la funcion alega
//
Table1.Close;
H1:=horarios;
Label1.Caption:= H1.Dia_c+'/'+H1.Hora_c ;
// etc etc
end;

esto funcona

y no me deja funtion tform1.horarios:treg;

Disculpa las molestias y muchas gracias

// Saludos :(

Viet
28-10-2003, 20:30:21
Por lo que estas poniendo no estas declarando dentro del Form la funcion, mira lo que roman te indico

deberia estar definida dentro de la clase TForm1 y cuando la implementas debe ser function Tform1.horarios:Treg;

Debes tener en cuenta que una funcion tiene una declaracion y una implementacion , como te indico roman.

roman
28-10-2003, 20:39:47
Antes que nada te pido de favor que ya no incluyas todo el texto en tus mensajes pues se hacen innecesariamente largos, y por favor deja tus comentarios fuera de la etiqueta QUOTE. Es muy pesado leer todo en negritas.

Ahora bien, del código que mandas es difícil deducir qué es lo que sucede ya que hay referencias que nos son claras.

Por una lado tienes el evento

procedure TTiempo.botonClick(Sender: TObject);

que genera la impresión de que tu formulario se llama "Tiempo":


type
TTiempo = class(TForm)
...
end;


Sin embargo, después mencionas que tform1.horarios:treg no funciona; y de aquí da la impresión de que el formulario es Form1 y no Tiempo.

Por otra parte, en TTiempo.botnClick tienes la asignación

H1:=horarios;

pero horarios es una función!

Y finalmente, la función Horarios está suelta, no pertenece a ningún formulario y, como te mencioné en el mensaje anterior, debes asegurarte que tu función (Horarios) sea realmente un método del formulario, tanto que esté declarado dentro de la clase del formulario como que su implementación esté anteceidad del nombre de la clase del formulario.

// Saludos

rolando_s
04-11-2003, 21:08:06
roman comentó:
Antes que nada te pido de favor que ya no incluyas todo el texto en tus mensajes pues se hacen innecesariamente largos, y por favor deja tus comentarios fuera de la etiqueta QUOTE. Es muy pesado leer todo en negritas.

Ahora bien, del código que mandas es difícil deducir qué es lo que sucede ya que hay referencias que nos son claras.

Por una lado tienes el evento

procedure TTiempo.botonClick(Sender: TObject);

que genera la impresión de que tu formulario se llama "Tiempo":


type
TTiempo = class(TForm)
...
end;


Sin embargo, después mencionas que tform1.horarios:treg no funciona; y de aquí da la impresión de que el formulario es Form1 y no Tiempo.

Por otra parte, en TTiempo.botnClick tienes la asignación

H1:=horarios;

pero horarios es una función!

Y finalmente, la función Horarios está suelta, no pertenece a ningún formulario y, como te mencioné en el mensaje anterior, debes asegurarte que tu función (Horarios) sea realmente un método del formulario, tanto que esté declarado dentro de la clase del formulario como que su implementación esté anteceidad del nombre de la clase del formulario.

// Saludos

si Horarios es una funcion que regresa una serie de parametros
esta funcion esta en el mismo formulario que el resto (el from1 solo muestra una foto y una etqueta no parcipa de el resto de la funcion)
La funcion trabaja sin problemas pero cada vez que lallamo tengo que abrir la table1 leer un dato pasarselo a la funcion esta lo prosesa y todo oK.
lo que queiro es
Table1.Open;
Varxx:=Table1.FieldByName('DiaEntrada').AsInteger;
code
code
Table1.close;

Pero dentro de la funcion

no afuera
Por que la llamo desde 35 puntos en este form

y cada ves que la llamo dentro reclama

la unica explicacion que encuentro es que este en el orden de esto.

type
Treg = Record
Fecha, horario:TDateTime;
Ano, Mes, Dia, Hora, Minuto, Segundo, MSegundo :Word;
Hora_c, Dia_c, existe : String;
end;
TTiempo = class(TForm)
boton: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Table1: TTable;
DataSource1: TDataSource;

estube registrando los foros antiguos y no encuentro ningun llamado a tablas dentro de funciones.
gracias de antemano.