 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
erwebon Cdt

Registrado: 23 Abr 2003Mensajes: 15
|
Publicado: Mar 26 Ago, 2003 8:36 am Asunto: Regenerar índices NDX de Dbase? |
|
|
| Cómo es posible eliminar unos archivos NDX (índices ya creados por el Database Desktop) y volver a crearlos en tiempo de ejecución, cómo si lo hiciera el mismo Database Desktop???. He buscado por todos sitios , pero no hallé respuesta aún. Gracias a todos. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 26 Ago, 2003 9:14 am Asunto: |
|
|
Lo que comentas (generar los índices en tiempo de ejecución) lo hago al crear y/o restaurar las tablas. Puedes propar con la instrucción IndexDefs de las tablas (Table1->IndexDefs->Add...). _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
erwebon Cdt

Registrado: 23 Abr 2003Mensajes: 15
|
Publicado: Mar 26 Ago, 2003 12:27 pm Asunto: índices ndx |
|
|
Gracias por contestar tan rápido Ángel. La cosa es que las tablas ya están creadas, y por culpa de posibles índices corruptos lo que quiero es eliminarlos y volver a crearlos. Por ahí encontré, un código que personalizé para mi trabajo pero me da el error justo en la primera sentencia AddIndex indicándome "Table level changed", lo cual no entiendo. A ver si podeis ayudarme, aquí llevais el código:
//borrar los archivos índices
AnsiString Indi1 = Table1->DatabaseName + "\\CODIGOC.NDX";
AnsiString Indi2 = Table1->DatabaseName + "\\NOMBREC.NDX";
AnsiString Indi3 = Table1->DatabaseName + "\\POBLACIC.NDX";
DeleteFile(Indi1);
DeleteFile(Indi2);
DeleteFile(Indi3);
//borrar la definición de índices:
Table1->IndexDefs->Clear();
//volver a definir los índices
Table1->AddIndex(Indi1,"CODIGO",TIndexOptions(),"");
Table1->AddIndex(Indi2,"NOMBRE",TIndexOptions(),"");
Table1->AddIndex(Indi3,"POBLACION",TIndexOptions(),"");
//abrir la tabla
Table1->Open(); |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 26 Ago, 2003 1:16 pm Asunto: |
|
|
Si pides ayuda para NDX en Builder te lanza una página de ayuda sobre los índices dBase. Como hace tiempo que no uso tablas dBase, me he encoinmtrado con una instrucción que desconocía: IndexFiles.
De todas formas, el código que has puesto me parece correcto la primera parte (borrado), pero la segunda (creación) creo que la complicas un poco; además, el hecho de aprir la tabla no crealos índices y en el AddIndex te sobra un parámetro; yo probaría esto:
| Código: | TIndexOptions Opcion;
Opcion << ixPrimary;
Table1->AddIndex(Indi1,"CODIGO", Opcion);
Table1->AddIndex(Indi2,"NOMBRE", Opcion);
Table1->AddIndex(Indi3,"POBLACION", Opcion);
Table1->CreateTable(); |
En teoría, dado que no haces ninguna redefinición de la tabla sólo debría crear los índices. Pruébalo y me cuentas algo.  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
erwebon Cdt

Registrado: 23 Abr 2003Mensajes: 15
|
Publicado: Mar 26 Ago, 2003 5:33 pm Asunto: de nuevo a preguntar y dar ideas (espero) |
|
|
El código no llega al CreateTable(). Se queda en el primer AddIndex con el error que comenté antes. llevo toda la tarde buscando alguna solución. En muchas páginas encontré algo así como esto
http://www.rxlib.ru/faqs/faqc_en/18752.html
es decir, que recomiendan utilizar el DBI, buscando por éste encontré algo interesante pero no consigo hacerlo ejecutar, pues no sé bien los parámetros a darle a la funcion.
------------------------
Reindexing a table
To reindex a table you should first open it (see Opening a table and one index). Then the index can be regenerated by means of the following function call:
DbiRegenIndex ( hDB, hTable, NULL, NULL, "MYINDEX_2.NDX", NULL, 0 ) );
If the table has more than one index you should call DbiRegenIndex as many times as the indexes count. Before each call close the table and reopen it with the only one index to regenerate.
-----------------
La información la saqué de
http://www.hochfeiler.it/alvise/BDE.HTM#ReindexingTable
he probado con...
DbiRegenIndex (Table1->DatabaseName, Table1->DatabaseName+"\\CLIENTES.DBF", NULL, NULL, Indi1, NULL, 0 );
pero lógicamente esos 2 primeros parámetros (AnsiString) no son el tipo que pide la función que son del tipo hDBIObj.
Nada, que a ver que pasa. Gracias por contestar de nuevo.  |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|