Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2020
davidsolo davidsolo is offline
Registrado
 
Registrado: abr 2020
Posts: 5
Poder: 0
davidsolo Va por buen camino
Error al crear una tabla con parametros.

buenos días a todos¡¡
estoy realizando una prueba con delphi 10.2 componentes zeos y mysql.
en un archivo txt tengo guardado una estructura de un tabla y en tiempo de ejecución vuelco el contenido del txt a una ZQuery y ejecuto dicha Zquery.... ahí no problemas se crea la tabla en la base de datos.

el problema surge cuando quiero cambiar el nombre de esa tabla dependiendo del día que se encuentra.. asi que en el txt ahora
coloco el nombre de la tabla de esta manera " :nombreTabla "
y en código delphi coloco esto:


DM.miSQL.Params[0].Value := edit1.Text;
DM.miSQL.ExecSQL;



y me envía un error de sintaxis de mysql


también carge en tiempo de diseño la estructura de la tabla en el zquery.sql.txt y cuando ejecuto la zquery me envia el error que no encuentra el parametro..


espero comentarios
Responder Con Cita
  #2  
Antiguo 28-10-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues sin ver el script es bien difícil adivinarlo.
De todas formas, para renombrar una tabla tendrá que hacer algo parecido a:
alter table nombre rename to nuevonombre
Responder Con Cita
  #3  
Antiguo 28-10-2020
davidsolo davidsolo is offline
Registrado
 
Registrado: abr 2020
Posts: 5
Poder: 0
davidsolo Va por buen camino
gracias por responder..
tengo esto en el txt:
Código SQL [-]
create table if not exists :Parametro
(
    id_local                varchar(1)      not null,                
    id_prod                integer           not null,        
    id_mcodbarra        varchar(20)     not null,
    .
    .
    .

    primary key (id_prod,id_mcodbarra)
)
engine=innodb;


y en delphi


Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var F: TextFile;
    sLinea: String;
begin
  AssignFile( F, ExtractFilePath( Application.ExeName ) + 'tabla.txt' );
  Reset( F );
  
  DM.miSQL.Close;
  DM.miSQL.SQL.Clear;
  while not Eof( F ) do
  begin
    ReadLn( F, sLinea );
    DM.miSQL.SQL.Add( sLinea );
  end;
  DM.miSQL.Params[0].Value := edit1.Text;
  DM.miSQL.ExecSQL;
  CloseFile( F );
end;


la intención es crear una nueva tabla no renombrar una tabla existente. parece que no me explique bien.. en eso de cambiar el nombre de la tabla..
Responder Con Cita
  #4  
Antiguo 28-10-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No uses parámetros de la query. Aunque son recomentable no sirven para usarlos en todas partes.
Es decir, puedes hacer elto:
Código SQL [-]
SELECT * FROM TABLA1 WHERE CAMPO1=:valor

pero no puedes hacer esto:

Código SQL [-]
:valor * FROM TABLA1 WHERE CAMPO1=33

En este caso sustituye el valor de :Parametro con un AnsiReplaceText.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 28-10-2020
davidsolo davidsolo is offline
Registrado
 
Registrado: abr 2020
Posts: 5
Poder: 0
davidsolo Va por buen camino
y como seria eso?
Responder Con Cita
  #6  
Antiguo 28-10-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creando la consulta, sin parámetros.
Código:
cSql := "update "+ cNombreTabla +" set campo1= ......."
QR.selectsq.text := cSql;
...
Responder Con Cita
  #7  
Antiguo 29-10-2020
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Los "bind parameters" no se traducen en strings, a grandes rasgos son "valores + tipo de datos", y como te dijeron anteriormente, no puede usarlos en cualquier contexto.

Pese a lo dicho, MySql te permite ejecutar código dinámico. Por lo que, si bien nunca lo he probado, calculo que puedes utilizar parámetros para definición de nombres en código dinámico.

Por ejemplo, podrías tener un procedure tipo:
Código SQL [-]
CREATE PROCEDURE CREAR_TABLA(IN table_name CHAR(64))
BEGIN
    SET @sql = CONCAT('CREATE TABLE IF NOT EXIST', table_name, '(id_local varchar(1) not null,  id_prod integer not null');
    PREPARE cmd FROM @sql;
    EXECUTE cmd;
    DEALLOCATE PREPARE cmd;
END

PD: ¡Nada de lo que he escrito lo he probado!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 29-10-2020
davidsolo davidsolo is offline
Registrado
 
Registrado: abr 2020
Posts: 5
Poder: 0
davidsolo Va por buen camino
ok....gracias por tu ayuda¡¡¡¡
Responder Con Cita
  #9  
Antiguo 29-10-2020
davidsolo davidsolo is offline
Registrado
 
Registrado: abr 2020
Posts: 5
Poder: 0
davidsolo Va por buen camino
al final realice esto "archivo .txt":
Código SQL [-]
(
    id_local        varchar(1)    not null,                
    id_prod            integer        not null,        
    id_mcodbarra        varchar(20)    not null,
    descprod        varchar(60)    not null,
    precio_vta_detalle    integer        not null,
    cantidad_escala1    integer        not null,
    precio_vta_escala1    integer        not null,
    cantidad_escala2    integer        not null,
    precio_vta_escala2    integer        not null,
    cantidad_escala3    integer     not null,
    precio_vta_escala3    integer        not null,    
    p_vta_d_neto        integer        not null,
    p_escala_1_neto        integer        not null,    
    p_escala_2_neto        integer        not null,
    p_escala_3_neto        integer        not null,
    cantidad_escala4    integer        not null,
    precio_vta_escala4    integer        not null,
    cantidad_escala5    integer        not null,
    precio_vta_escala5    integer        not null,    
    capacidad        integer        not null,
    id_lista        integer        not null,
    fecha_cambio        varchar(40)    not null,        
    usuario            varchar(30)    not null,
    equipo            varchar(30)    not null,
    usuario_actualizacion    varchar(30)    not null,
    equipo_actualizacion    varchar(30)    not null,
    flag            varchar(2)    not null,
       primary key (id_prod,id_mcodbarra)
)
engine=innodb;
y en delphi
Código Delphi [-]
procedure TFichaCreaTabla.Button1Click(Sender: TObject);
var F: TextFile;
    sLinea: String;
begin
  AssignFile( F, ExtractFilePath( Application.ExeName ) + 'tabla.txt' );
  Reset( F );
  DM.miSQL.Close;
  DM.miSQL.SQL.Clear;
  DM.miSQL.SQL.Add('create table if not exists ' + edit1.Text + ' ');
  while not Eof( F ) do
  begin
    ReadLn( F, sLinea );
    DM.miSQL.SQL.Add( sLinea );
  end;
  DM.miSQL.ExecSQL;
  CloseFile( F );
end;


y resulto...pero ahora voy por la propuesta de delphi.com.ar...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error al crear Tabla Quim Herrera Firebird e Interbase 2 06-09-2011 11:05:41
Error al crear tabla dBase con ADO gtstromboli Conexión con bases de datos 0 14-07-2010 16:07:23
error al crear una tabla ebeltete Firebird e Interbase 7 05-06-2007 19:49:49
Da Error al crear un indice una tabla DBF Antuan Conexión con bases de datos 9 04-10-2005 22:11:07
error al crear tabla albarchi MySQL 2 10-02-2005 20:26:01


La franja horaria es GMT +2. Ahora son las 13:00:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi