Cita:
Esto funcionaria??:
FCursor := self.getnamepath + RandomString(8);
|
si esta creado dinamicamente y no has asignado un nombre anteriormente, no, pues es mas o menos lo que ya estaban haciendo ellos. Yo haria algo asi: pasar FCursor a protected o a public o bien crear una propiedad con el numero de cursor que es, y hacer algo asi:
Código Delphi
[-]
NCursor := 0;
for i := Application (o parent o owner).ComponentCount - 1 do
if (Application.Components[i] is TMDOQuery)
then NCursor := Max((Application.Components[i] as TMDOQuery).NCursor + 1,NCursor);
FCursor := inttostr(NCursor);
tambien, ahora que lo pienso, puedes capturar la excepción alla mismo:
Código Delphi
[-]
Libre := false;
while not Libre then
try
FCursor := Name + RandomString(8);
Call(isc_dsql_set_cursor_name(StatusVector, @FHandle, PChar(FCursor), 0), True)
...
Libre := true;
except
end;
Lo que me sigue intrigando personalmente es que tansolo te pase en una unica tabla. Quiza deberias mirar mas profundamente las diferencias entre el diseño de la tabla que da error y el resto. Saludos.