Очевидная проблема находится на комментируемых строки ниже, где вы создаете что-то называется TFBuscarRequisicionBodega
и присваивают это переменной с именем FBuscarRequisicionBodega
и установить несколько свойств FBuscarRequisicionBodega
. Затем вы вызываете ShowModal
на совершенно другой переменной по имени FBuscarRequisicion
и освободите его после этого. Вы теперь осиротели FBuscarRequisicionBodega
(ничто никогда не освобождает его), и в то же время вызвали ShowModal
на то, что вы еще не указали для кода (FBuscarRequisicion
), и освободили его потом. При повторном нажатии на кнопку затем вызовите ShowModal
на то, что вы освободили в последний раз.
Эта проблема кажется довольно ясно обнаружить, даже не читая имена переменных - просто проверить эти две строки кода:
FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
FBuscarRequisicion.ShowModal;
Посмотрите, как переменной длины имен не совпадают? (.
не выстраивается в линию, потому что первый имеет шесть букв, чем второй).
Прочитайте имена переменных очень тщательно в коде, который вы опубликовали, и проблема кажется очень ясной. (Две секунды с отладчиком скажут вам наверняка, вы действительно должны научиться его использовать).
procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject);
begin
inherited;
// You create something and assign it to one variable here.
// Set debugger breakpoint on next line (F5, click the grey
// gutter to the left of the editor line numbers, or right-click
// the line and choose Debug->Toggle Breakpoint, run your app (F9),
// and step through the code with F8.
FBuscarRequisicionBodega := TFBuscarRequisicionBodega.Create(Application);
FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
// You then call ShowModal on a totally different variable here, then
// free it after ShowModal returns.
FBuscarRequisicion.ShowModal;
FBuscarRequisicion.Free;
dbgListaRequisiciones.Setfocus;
end;
На каком языке это? Я принимаю Delphi из вашей истории вопроса. – Charles
Один из объектов - 'nil'. Используйте отладчик, чтобы узнать, какой из них он есть. –
По крайней мере, 'FBuscarRequisicion' станет свисающим указателем после первого вызова этого метода событий (после первого нажатия кнопки). – TLama