Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Estrutura dos arquivos Paradox


José Luiz

Pergunta

Estou fazendo um programa ( segue uma cópia a seguir ) para relacionar os campos dos bancos de dados Paradox em um determinado diretório.

O programa deve ser rodado a partir do DOS, no diretório desejado, pois não permite que este seja alterado.

O programa funciona perfeitamente para a estrutura dos bancos de dados, mas não estou conseguindo relacionar os arquivos de índice com seus respectivos campos.

Alguém saberia como posso fazer esta verificação ?

Obrigado,

José Luiz.

O PROGRAMA JÁ DESENVOLVIDO.

unit INICIO;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DB, DBTables, Buttons, Grids, DBGrids, FileCtrl;

type

TF_INICIO = class(TForm)

FileListBox1: TFileListBox;

Table1: TTable;

DataSource1: TDataSource;

Function PAD ( mPOS, mVAR, mCAR : string ; mTAM : Integer ) : String ;

procedure FormShow ( Sender: TObject );

private

{ Private declarations }

FileListBox1List : TStringList ;

public

{ Public declarations }

end;

var

F_INICIO: TF_INICIO;

implementation

{$R *.dfm}

// Na propriedades Mask do FileListBox1 ( Aba Win3.1 ), colocar *.DB

procedure TF_INICIO.FormShow(Sender: TObject);

var

i : Integer ;

j : Integer ;

Lista : TextFile;

mTIPO : String ;

begin

FileListBox1List := TStringList.Create ;

AssignFile ( Lista, 'D_ESTRUT.TXT' );

Rewrite ( Lista ) ;

for i := 0 to FileListBox1.Count - 1 do begin

Table1.TableName := FileListBox1.Items [ i ];

Table1.Open ;

Writeln ( Lista, '' );

Writeln ( Lista, ' ' + PAD ( 'E', Table1.TableName, ' ', 25 ) +

IntToStr ( Table1.RecordCount ) + ' registros' );

Writeln ( Lista, '' );

Writeln ( Lista, ' Campo Descricao Tipo Tam' );

Writeln ( Lista, ' ===== ========== ============ ===' );

for j := 0 to table1.FieldCount-1 do begin

mTIPO := 'Outros' ;

if Table1.Fields[j].DataType = ftString then mTIPO := 'String ' ;

if Table1.Fields[j].DataType = ftSmallint then mTIPO := 'Smallint ' ;

if Table1.Fields[j].DataType = ftInteger then mTIPO := 'Integer ' ;

if Table1.Fields[j].DataType = ftWord then mTIPO := 'Word ' ;

if Table1.Fields[j].DataType = ftBoolean then mTIPO := 'Boolean ' ;

if Table1.Fields[j].DataType = ftFloat then mTIPO := 'Float ' ;

if Table1.Fields[j].DataType = ftCurrency then mTIPO := 'Currency ' ;

if Table1.Fields[j].DataType = ftDate then mTIPO := 'Date ' ;

if Table1.Fields[j].DataType = ftTime then mTIPO := 'Time ' ;

if Table1.Fields[j].DataType = ftDateTime then mTIPO := 'DateTime ' ;

if Table1.Fields[j].DataType = ftBytes then mTIPO := 'Bytes ' ;

if Table1.Fields[j].DataType = ftVarBytes then mTIPO := 'VarBytes ' ;

if Table1.Fields[j].DataType = ftAutoInc then mTIPO := 'AutoInc ' ;

if Table1.Fields[j].DataType = ftBlob then mTIPO := 'Blob ' ;

if Table1.Fields[j].DataType = ftMemo then mTIPO := 'Memo ' ;

Writeln ( Lista, ' ' + PAD ( 'D', IntToStr ( j + 1 ), ' ', 3 ) +

' ' + PAD ( 'E', Table1.Fields[j].FieldName, ' ', 10 ) +

' ' + mTIPO +

' ' + PAD ( 'D', IntToStr ( Table1.Fields [j].DataSize - 1 ), ' ', 3 ) );

end ;

Table1.Close ;

Writeln ( Lista, '' );

end ;

CloseFile ( Lista );

Application.Terminate ;

end;

Function TF_INICIO.PAD ( mPOS, mVAR, mCAR : string; mTAM : Integer ): String ;

var

mPREENCHE : string ;

i : Integer ;

begin

mVAR := Copy ( mVAR, 1, mTAM ) ;

mPREENCHE := '' ;

for i := 1 to mTAM - Length ( mVAR ) do begin

mPREENCHE := mPREENCHE + mCAR ;

end ;

if mPOS = 'D' then

result := mPREENCHE + mVAR

else

result := mVAR + mPREENCHE ;

end;

end.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Estou fazendo um programa ( segue uma cópia a seguir ) para relacionar os campos dos bancos de dados Paradox em um determinado diretório.

O programa deve ser rodado a partir do DOS, no diretório desejado, pois não permite que este seja alterado.

O programa funciona perfeitamente para a estrutura dos bancos de dados, mas não estou conseguindo relacionar os arquivos de índice com seus respectivos campos.

Voce só pode fazer isso depois que os campos forem criados

exemplo:

Criando tabelas Paradox com índices primários e secundários, em Delphi, via programação usando componente Ttable 

try 
Table1.Close; 
Table1.DatabaseName := 'C:\TEMP'; { um alias BDE ou diretório} 
Table1.TableName := 'func.DB'; { extensão .DB é opcional} 
Table1.TableType := ttParadox; { deve ser especificado quando se cria uma tabela} 
{ definindo alguns campos} 
with Table1.FieldDefs do 
   begin 
      Update; {não é necessário, mas...} 
      Clear; { limpa a tabela antiga} 
      { a chave primária deve ser criada com o atributo "required" como true } 
      Add('Codigo', ftInteger, 0, true); 
      Add('Nome', ftString, 60, false); 
      Add('Endereco', ftString, 60, false); 
      Add('Salario', ftFloat, 0, false); 
      Update; 
   end; 
{ adiciona a chave primária e três secundárias} 
with Table1.IndexDefs do 
   begin 
      Update; {não é necessário, mas...} 
      Clear; {limpa os antigos} 
      { A chave primária Paradox não tem nome.} 
      { Nunca de o mesmo nome do campo ao índice, se fizer isso não poderá usar ixCaseInsensitive } 
      Add('', 'codigo', [ixPrimary]); 
      { A opção ixCaseInsensitive não é valida para chaves primárias} 
      { Nunca crie mais indices do que você precisar. Você poderá fazer isso depois} 
      Add('NomeIDX', 'Nome', [ixCaseInsensitive]); 
      Add('EnderecoIDX', 'Endereco', [ixCaseInsensitive]); 
      { combinando um índice com dois campos: } 
      Add('testeIDX', 'Nome;Endereco', [ixCaseInsensitive]); 
      Update; 
   end; 
Table1.CreateTable; 
Table1.Open; 
Except 
MessageDlg('Erro na Criação da Tabela ou Índice', mtError, [mbOK],0); 
end; 


Sempre abra o arquivo após criá-lo. Se você não for usá-lo, feche-o logo após. Nunca execute um IndexDefs.Update antes de executar o CreateTable e o Open (senão você jogará fora o seu novo specs e pegará o antigo IndexDefs).

Dica de http://joabesrr.vilabol.uol.com.br

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe, acho que não fui claro.

Os bancos de dados e os índices já existem.

Desejo apenas relacioná-los em um arquivo chamado D_EXTRUT.TXT.

Conforme o programa acima, consegui relacionar os campos, mas não estou conseguindo relacionar os arquivos de índice com os respectivos campos indexados.

Obrigado.

José Luiz.

Link para o comentário
Compartilhar em outros sites

  • 0
Os bancos de dados e os índices já existem.

Desejo apenas relacioná-los em um arquivo chamado D_EXTRUT.TXT.

Conforme o programa acima, consegui relacionar os campos, mas não estou conseguindo relacionar os arquivos de índice com os respectivos campos indexados.

A maneira que eu conheço para fazer isso é apagar os arquivos de indices .px, .x* e .y* da tabela e recriar os índices novamente. Exemplo:

Table1.AddIndex('NomeIndice', 'Campo1:Campo4', [ixUnique, ixCaseInsensitive]);

A menos que algum outro colega tenha outra solução.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, obrigado pelo seu interesse, mas não estamos nos entendendo.

Suponhamos que eu tenha um banco de dados que eu não conheço, e os respectivos arquivos de índice, em um diretório.

Como eu não sei a estrutura destes dados, utilizo o programa acima para saber a estrutura do banco de dados, mas não sei como fazer para descobrir os campos dos arquivos de índice.

Mais uma vez obrigado,

José Luiz.

Link para o comentário
Compartilhar em outros sites

  • 0
Suponhamos que eu tenha um banco de dados que eu não conheço, e os respectivos arquivos de índice, em um diretório.

Como eu não sei a estrutura destes dados, utilizo o programa acima para saber a estrutura do banco de dados, mas não sei como fazer para descobrir os campos dos arquivos de índice.

[ não sei como fazer para descobrir os campos dos arquivos de índice.]

Eu uso este codigo para descobrir o nome do campo que é um indice primario e os nomes dos indices secundários

Veja se é isto que procura

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
   Table1.DatabaseName := 'NOME DO SEU ALIAS';
   Table1.TableName := 'NOME DA SUA TABELA';
   Table1.IndexDefs.Update;
   ListBox1.Items.add('_________ Índice Primário __________');

   for i:=0 to Table1.IndexDefs.Count-1 do
      begin
         if Table1.IndexDefs.Items[i].Options = [ixPrimary..ixUnique] then
            ListBox1.Items.add(Table1.IndexDefs.Items[I].Fields)
         else
            begin
               ListBox1.Items.add('');
               ListBox1.Items.add('_________ Índice Secundário __________');

               Listbox1.Items.Add(Table1.IndexDefs.Items[I].Name);
             end;
      end;

end;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...