Bueno, en algún momento tendrás que cambiar tus ZTable por ZQuery por el solo hecho de que en aplicaciones C/S realmente ya no debe trabajarse con tablas como no sean pequeños catálogos.
Pero tú necesitas una solución ahora y quizá la encontremos. Todas las clases TZTable, TZQuery y TZReadOnlyQuery derivan de la clase TZAbstractRODataset que introduce la propiedad SQL que es la que almacena la sentencia sql.
TZTable en particular, establece esa sentencia con un
y, de hecho lo hace así, en el método SetTableName:
Código Delphi
[-]
if FTableName <> Value then
begin
FTableName := Value;
if Value <> '' then
SQL.Text := Format('SELECT * FROM %s', [FTableName])
else SQL.Text := '';
end;
Y esto es una maravilla
¡El código no hace ninguna validación para determinar si lo que se asigna a la propiedad TableName es realmente el nombre de una tabla!
Entonces, así como escribes:
Código Delphi
[-]
ZTable1.TableName := 'clientes';
Nada impide escribir:
Código Delphi
[-]
ZTable1.TableName := 'clientes limit 50';
Al hacerse la sustitución en la función Format, quedará
Código SQL
[-]
SELECT * FROM clientes limit 50
y
voilà
Incluso puedes colocar ese valor (clientes limit 50) en el inspector de objetos y activar la tabla durante el diseño.
// Saludos