Pessoal, no parte file, esqueci de incluir a liberação dos objetos ACsvFile e ACsvRow. Não esqueçam disso antes de usar esta rotina. Postem seus comentários sobre ela nesta thread.
Sds. --- Em delphi-br@yahoogrupos.com.br, "Rubem Nascimento da Rocha" <[EMAIL PROTECTED]> escreveu > > > Não sou muito de fazer esse tipo de coisa, mas aí vai a receita de bolo > pronta (pra quem não quer ter trabalho e querer tudo mastigado!) > > { A partir de uma tabela paradox ativa em um TTable, exporta o seu conteúdo > atual para um arquivo texto padrão CSV. Precisa das units DB e DBTables } > procedure PDoxToCSV(ATable: TTable; const CsvFilePath: String); > const > { Tipos de dados que não são permitidos na exportação de dados } > AFieldTypesNotAllowed: set of TFieldType = > [ftUnknown, ftBytes, ftVarBytes, ftBlob, ftGraphic, ftParadoxOle, > ftDbaseOle, ftTypedBinary, ftCursor, ftADT, ftArray, ftReference, > ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, > ftIDispatch, ftGuid]; > > { Tipos para tratamento de campos de ponto flutuante } > AFieldFloatTypes: set of TFieldType = > [ftFloat, ftCurrency, ftBCD, ftFMTBcd]; > > { Tipos para tratamento de campos string } > AFieldStringTypes: set of TFieldType = > [ftString, ftMemo, ftFixedChar, ftWideString]; > var > lBookmark: TBookmark; > lFld, lFldCount: Integer; > ACsvFile, ACsvRow: TStringList; > AFieldTypesNotAllowed: set of TFieldType; > AFieldFloatTypes: set of TFieldType; > lFieldData: String; > begin > lBookmark := ATable.GetBookmark; > while not ATable.ControlsDisabled do > ATable.DisableControls; > ATable.First; > > Screen.Cursor := crHourGlass; > ACsvFile := TStringList.Create; > ACsvRow := TStringList.Create; > ACsvRow.Delimiter := ','; > > try > { Cabeçalho de um CSV sempre terá o nome dos campos. Ao mesmo tempo, > checa se os campos possuem tipos de dados válidos para exportação. } > lFldCount := ATable.FieldCount; > for lFld := 0 to lFldCount - 1 do > begin > if ATable.Fields[lFld].FieldType in AFieldTypesNotAllowed then > raise Exception.CreateFmt('Table %s has fields with not supported > data types.'); > ACsvRow.Add(ATable.Fields[lFld].FieldName); > end; > ACsvFile.Add(ACsvRow.DelimitedText); > > { As próximas linhas do CSV correspondem às linhas de dados } > while not ATable.Eof do > begin > ACsvRow.Clear; > for lFld := 0 to lFldCount - 1 do > begin > lFieldData := ATable.Fields[lFld].AsString; > if ATable.Fields[lFld].FieldType in AFieldFloatTypes then > lFieldData := StringReplace(lFieldData, ',', '.', [rfReplaceAll]) > else if ATable.Fields[lFld].FieldType in AFieldStringTypes then > lFieldData := StringReplace(lFieldData, #32, #255, > [rfReplaceAll]); > ACsvRow.Add(lFieldData); > end; > ACsvRow.DelimitedText := StringReplace(lFieldData, #255, #32, > [rfReplaceAll]); > ACsvFile.Add(ACsvRow.DelimitedText); > ATable.Next; > end; > ACsvFile.SaveToFile(CsvFilePath); > finally > ATable.GotoBookmark(lBookmark); > ATable.FreeBookmark(lBookmark); > while ATable.ControlsDisabled do > ATable.EnableControls; > Screen.Cursor := crDefault; > end; > end; > > Sds. > > >From: "Welson Tavares" <[EMAIL PROTECTED]> > >Reply-To: delphi-br@yahoogrupos.com.br > >To: delphi-br@yahoogrupos.com.br > >Subject: [delphi-br] Paradox -> CSV > >Date: Mon, 19 Feb 2007 15:48:47 -0200 > > > >Boa tarde, > > > > Alguém tem alguma aplicação/rotina que leia os dados de uma tabela do > >Paradox e salve os dados como CSV? > > > >Valeu > > > >Welson Tavares > > > > > >[As partes desta mensagem que não continham texto foram removidas] > > > > _________________________________________________________________ > MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br >