Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Nombres válidos para tablas paradox (Propiedad TableName)

La cuestión es que al crear una tabla paradox en runtime, trato de que el nombre de la misma sea introducido por el usuario de la aplicación mediante un InputQuery. El caso es que para validar dicho nombre, compruebo que no sea una cadena vacía y que si su nombre ya coincide con el nombre de otra tabla, nos de la posibilidad de sobreescribir. Sin embargo, cabe la posibilidad de que el usuario introduzca caracteres no válidos para el nombre de una tabla y me gustaría preguntar de qué manera atajo esa posibilidad. Si podeis también facilitarme dónde puedo ver las restricciones de caracteres no válidos os lo agradecería, ya que creo que son '\', '/' y '.', pero no sé si hay alguno más.

Código:
    String nombreTabla = ""; //Inicializamos a cadena vacía

    TTable *nuevaTabla = new TTable(this);
    nuevaTabla->Active = false;
    nuevaTabla->DatabaseName = ruta_db;
    nuevaTabla->TableType = ttParadox;

    //Proceso para asignar el nombre que recibirá la Tabla:
    if(InputQuery("Asignar nombre de la tabla","Introduzca el nombre de la nueva tabla",nombreTabla))
    {
       if(!nombreTabla.IsEmpty()) //Si el nombre de la tabla no es una CADENA VACÍA
       {
          if(Comprobamos si nombreTabla es válido)
          {
             nuevaTabla->TableName = nombreTabla; //Asignamos el nombre de la Tabla
             //Aquí irían la definición de los campos
             nuevaTabla->CreateTable(); //Finalmente, se crea la Tabla
          }
          else
          {
             //Volver a intentarlo de nuevo avisando de los caracteres no válidos
          }
      }
    }
Responder Con Cita
  #2  
Antiguo 05-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Yugo.

Revisa este ejemplo:
Código:
/* Crear tabla */
void TablaCreate(String tableName) {
  TTable *tb = new TTable(NULL);

  tb->Close();
  tb->DatabaseName = ExtractFilePath(Application->ExeName); // ruta
  tb->TableName = tableName;
  tb->TableType = ttParadox;
  tb->FieldDefs->Clear();
  tb->FieldDefs->Add("ID", ftAutoInc, 0, false);
  tb->FieldDefs->Add("NOMBRE", ftString, 30, false);
  tb->FieldDefs->Add("DOMICILIO", ftString, 30, false);
  tb->FieldDefs->Add("TELEFONO", ftString, 15, false);
  tb->IndexDefs->Clear();
  tb->IndexDefs->Add("", "ID", TIndexOptions()<< ixPrimary << ixUnique);
  tb->IndexDefs->Add("INDNOMBRE", "NOMBRE", TIndexOptions()<< ixCaseInsensitive);
  tb->CreateTable();

  delete tb;
}

/* Verificar nombre */
bool isValidName(String str) {
  if (str == "" || (str[1]>='0'&&str[1]<='9'))
    return false;

  for(int i=1; i< str.Length(); i++) {
    char c = UpCase(str[i]);
    if(!((c>='A'&&c<='Z') || (c>='0'&&c<='9') || (c=='_')))
      return false;
  }

  return true;
}

/* Ejemplo de uso */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String name;
  bool ok;
  do {
    if(InputQuery("Crear tabla", "Nombre", name))
      ok = isValidName(name);
  } while ((name != "") && !ok);

  if (name != "")
    TablaCreate(name);
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Supongo que para introducir el nombre usas un TEdit ¿Por que no usas el evento OnKeyPress para filtrar las pulsaciones de teclas? Con eso te aseguras que no se introduzcan caracteres invalidos.
Responder Con Cita
  #4  
Antiguo 05-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
si sabes que son solo esas tres pues if(Key == '/' ll Key == '\\' ll Key == '.') Key = 0;
Responder Con Cita
  #5  
Antiguo 06-09-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Qué tal ecfisa, tu código resulta muy cómo la verdad. Creo que sería interesante poder crear un módulo para poder insertarlo en el proyecto y de esta forma, si hay que recurrir varias veces a realizar dicha comprobación, ahorrarnos algo de código.... voy a tratar de hacerlo para exponerlo aquí. Espero, que me des permiso para usar tu código como ejemplo.

Por cierto, creo que se te olvidó poner el signo <= en la condición del bucle for que he resaltado en tu código. Si sólo ponemos < el bucle no recorrería la cadena String al completo, le faltaría el último carácter, ¿no?

Código:
/* Verificar nombre */
bool isValidName(String str) {
  if (str == "" || (str[1]>='0'&&str[1]<='9'))
    return false;

  for(int i=1; i<=str.Length(); i++) {  
    char c = UpCase(str[i]);
    if(!((c>='A'&&c<='Z') || (c>='0'&&c<='9') || (c=='_')))
      return false;
  }

  return true;
}
PD: Hay que ver que aún no le he cogido el truco a la opción de citar... se descuadra todo el codigo, jajajaja

Última edición por Yugo fecha: 06-09-2014 a las 02:15:57.
Responder Con Cita
  #6  
Antiguo 06-09-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Hola aguml, qué tal todo!! gracias por tu consejo. Seguro que lo probaré. Mi intención en este caso es conseguir el nombre mediante un InputQuery, pero es bueno saber de otras opciones.


Cita:
Supongo que para introducir el nombre usas un TEdit ¿Por que no usas el evento OnKeyPress para filtrar las pulsaciones de teclas? Con eso te aseguras que no se introduzcan caracteres invalidos.

si sabes que son solo esas tres pues if(Key == '/' ll Key == '\\' ll Key == '.') Key = 0;
Responder Con Cita
  #7  
Antiguo 06-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Yugo.
Cita:
Empezado por Yugo Ver Mensaje
Por cierto, creo que se te olvidó poner el signo <= en la condición del bucle for que he resaltado en tu código. Si sólo ponemos < el bucle no recorrería la cadena String al completo, le faltaría el último carácter, ¿no?
Es correcto

Y como te comenta aguml, lo normal es usar un TEdit donde se puede evaluar mucho mas fácilmente los caracteres ingresados, pero como comentaste que usarías un InputQuery, quise seguir la línea...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
nombres de tablas en un SP akela Conexión con bases de datos 2 14-12-2007 21:11:34
Propiedad tableName,al criterio look SQL 2 16-10-2007 01:54:32
¿Que componentes usar para tablas Paradox? h2o_mx Tablas planas 5 18-05-2006 18:14:38
Consejo para manejar tablas Paradox Coco_jac Varios 8 17-11-2005 17:27:17
como bloquear para borrar en tablas Paradox Mario1980 Varios 4 01-12-2004 15:17:51


La franja horaria es GMT +2. Ahora son las 08:04:26.


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