Hola.
La verdad es que siempre me ha parecido increible que los componentes de un formulario esten declarados en una sección pública que permite a otros formularios acceder a ellos.
En mi opinión un formulario nunca deberia poder acceder a los componentes de otros (quizá en algún caso muy concreto pueda ser adecuado, pero no se me ocurre ninguno).
Lo correcto, a mi modo de ver, es declarar una función
Insertar en el formulario, y que los otros formularios accedan a esa función y no a los componentes.
Código:
type
TForm2 = class(TForm)
...
...
public
procedure AnadirValor(Texto: String);
...
...
implementation
procedure TForm2.AnadirValor(Texto: String);
begin
dbgrid1.ReadOnly := false;
table1.insert;
table1.FieldByName('Talleres').assString := Edit1.Text
table1.post;
dbgrid1.ReadOnly := true;
end;
Ahora para ejecutar esa acción, podemos hacer desde otro Formulario :
Hijo.AnadirValor(Edit1.Text);
Aunque si vas a utilizar una variable
Hijo, ten en cuenta que ocurrirá cuando tengas abiertas dos veces un formulario de ese tipo. La variable
Hijo solo te apuntará a una de ellas. (¿ cual será ?, ¿ la ultima abierta ?, debes tenerlo controlado). La propuesta de Roman, es un buen ejemplo en el que se tiene controlado el formulario hijo, aunque puede haber varios de ellos.
Saludos.