NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Čtení a zápis do .dbf souboru

Aktivity
Avatar
Adam Čuba
Člen
Avatar
Adam Čuba:23.2.2017 15:44

Zdravím,

mám program, který pracuje s .dbf souborem a chtěl bych si napsat vlastní editor na zápis/čtení. Bohužel ať jsem vyzkoušel jakoukoliv knihovnu, tak to mělo problém tabulku přečíst. Nevíte někdo náhodou o nějaké funkční? Nemusí být přímo v Pythonu, stačil by jiný jazyk(C++, C#, Java, PHP).

Vím že tabulka je typu dBase IV a encoding je windows-1250. Buď jsou knihovny, které dokáží přečíst s tímhle encodingem, ale ne typu dBase IV, nebo to nedokáží kvůli encodingu. Už jsem celkem bezradný. Po dlouhém hledání sem ale našel program(bez zdrojového kódu), který ji přečíst dokáže a to je CDBF viewer & editor.

Předem všem díky za odpověď.

 
Odpovědět
23.2.2017 15:44
Avatar
Eda Stehlík
Člen
Avatar
Eda Stehlík:1.3.2017 20:54

Našel jsem na stránkách pythonu knihovnu dbfread. Tady máš odkaz, tak na to zkus mrknout. Knihovnu budeš nejspíš muset nainstalovat. https://pypi.python.org/pypi/dbfread

 
Nahoru Odpovědět
1.3.2017 20:54
Avatar
termostat
Člen
Avatar
termostat:3.3.2017 14:18

Mělo by to jít přes ODBC s modulem pyodbc. Budeš potřebovat si do Windows přidat zdroj ODBC pro dBase IV (příkaz odbcad32.exe) a potom kód bude zhruba takto:

import pyodbc

try:
    connection = pyodbc.connect(r'DRIVER={SQLite3 ODBC Driver};DATABASE=H:\Temp\SQLITE\test01.db')
    connection.setencoding(encoding='windows-1250')
    cursor = connection.execute("SELECT * FROM zamestnanec")
    row = cursor.fetchone()
    if row:
        print(row)

except Exception as ex:
    print(ex)

Tohle je ukázka pro SQLite, nemám zrovna žádnou dBase IV databázi, na které bych to zkusil, connection string si musíš upravit zhruba takto:

connection = pyodbc.connect(r'DRIVER={Microsoft dBase Driver (*.dbf)};DATABASE=H:\MojeCesta...')
 
Nahoru Odpovědět
3.3.2017 14:18
Avatar
termostat
Člen
Avatar
termostat:7.3.2017 12:05

Tak už jsem se dostal k vyzkoušení přes pyodbc + dBaseIV. Je potřeba se pojit takto:

import pyodbc
try:
    connection = pyodbc.connect("DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=H:\\...MojeCesta...\\", autocommit=True)
    connection.setencoding(encoding='windows-1250')
    cursor = connection.execute("SELECT * FROM ...DbSouborBezPripony...")
    row = cursor.fetchone()
    if row:
        print(row)

except Exception as ex:
    print(ex)
 
Nahoru Odpovědět
7.3.2017 12:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.