ugrás a tartalomhoz

dbf konvertálása sql-be (mysql-be)

pl509 · 2008. Már. 19. (Sze), 16.26
Szevasztok!
Van egy DBF-em, aminek a tábláit szeretném SQL-be konvertálni. Kezdő vagyok a témában ezért kérném a segítségeteket.
Azzal kezdtem, hogy a PHPMYADMIN-ban a MYSQL test adatbázisából csináltam egy exportot, megnéztem, hogy ennek milyen a felépítése. Ennek mintájára txt-be konvertáltam a DBF tábla adatait, majd azt megnyitva CTRL+A, CTRL+C, PHPMYADMIN SQL szerkesztő ablakába CTRL+V, VÉGREHAJT gomb, és némi várakozás után az adatok a helyükre kerültek. Igenám, de ez a módszer csak kisebb méretü tábláknál működik, ha meg a nagyokat feldarabolom kisebbekre az nagyon macerás. Tudnátok valami elegánsabb megoldást javasolni? A PHPMYADMIN-ban lévő import itt nem használható, mert a legkisebb importálandó fájl mérete is 100M feletti.
Az alábbi php-s megoldással próbálkoztam:
<?
$kapcsolat = mysql_connect('localhost', 'user', 'pass')
or die('MySQL hiba, nem tudok csatlakozni: ' . mysql_error());

echo '<center><h1>A MySQL kapcsolódás sikerült!</h1></center>';

$adatbazis=mysql_select_db("proba",$kapcsolat) ;
if (!$adatbazis) :
die("Nem tudom kiválasztani a kért adatbázist!" . mysql_error()) ;
endif ;

$sor = 1;
$handle = fopen("C:/a/proba.sql", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
$num = count($data);
$parancssor=false ;
$adatsor=false ;
for ($c=0; $c < $num; $c++)
{
switch ($num>0) :
case substr($data[0],0,6)=='INSERT' :
$parancssor=true ;
$adatsor=false ;
break;
case substr($data[0],0,6)!=='INSERT' :
$parancssor=false ;
$adatsor=true ;
break;
endswitch;

switch ($num>0) :
case $parancssor :
$parancs=$data[$c] ;
break;
case $adatsor :
$adat=$adat . mysql_real_escape_string($data[$c]) ;
break;
endswitch;
}
$sor++;
}

fclose($handle);
$jel='"' ;
$sqlparancs="mysql_query(" . $jel . $parancs . $adat . $jel . ");" ;
eval($sqlparancs) ;
printf("Az utoljára beszúrt sor a %d azonosítót kapta. <br>\n", mysql_insert_id());
mysql_close($kapcsolat);
?>

Ez hiba nélkül lefut, de egyetlen sor sem íródik be az aktuális táblába. Ezt én az eval függvénytől vártam volna, de ezek szerint ez erre így nem alkalmas. Van valami ötletetek?
Köszönettel pl509
 
1

CSV

zila · 2008. Már. 19. (Sze), 17.16
Szerintem egyszerűbb lenne, ha dbf-ől egy csv formátumú exportot csinálnál és azt töltenéd be mysql-be. Ha nagy a file és a mysql nem helyben van, de van a szerverhez ssh hozzáférésed, a távoli shellben parancssoros php betöltővel meg tudod csinálni a betöltését.

Most jut eszembe a php-nak vannak dbf kezelő függvényei is, azzal talán még egyszerűbb a megoldás:
http://www.php.net/manual/hu/ref.dbase.php
2

dbf konvertálása sqk-be (mysql-be)

pl509 · 2008. Már. 19. (Sze), 20.15
A táblák visual foxpro dbf-ben vannak. Ehez azt hiszem nincs mysql fv.
Bár visual foxból is lehetne dbase-ba konvertálni aztán ehez használni a
mysql fv.-eket, de ehez még nagyon kezdő vagyok ezért is kérek segítséget.
Egyébként minden helyben van a konvertáláshoz. A fájl, amibe a dbf tábla adatait kiírtam olyan szerkezetű, mint amilyent az export, vagy backup csinál (mysql-ből). Ezt be is tudom olvasni. A be inzertálással van gondom.
És mivel kezdő vagyok konkrét program soroknak örülnék.
Köszönettel pl509
3

phpMyAdmin code

randomly · 2008. Már. 19. (Sze), 21.36
Szia!

Mikor importálsz myadminban, akkor ott a php import kod.
Én feltöltöm a csv-t a szervere és lefuttatom phpadminban az sql parancsot.
rand

TRUNCATE TABLE `test`;
LOAD DATA LOCAL INFILE '/web/myhost.hu/csv/teszt.csv' INTO TABLE `test` FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '' LINES TERMINATED BY '\r\n';
DELETE FROM `teszt` WHERE `id` LIKE '1' LIMIT 1;
5

cli

zila · 2008. Már. 20. (Cs), 10.36
Ha már kész a sql file, akkor php sem kell a betöltéséhez: parancsorban kiadod
c:\path\to\mysql -u user -p dbneve < export.sql
parancsot és elvileg készen is vagy.
6

dbf konvertálása sql-be (mysql-be)

pl509 · 2008. Már. 20. (Cs), 13.49
Köszönöm mindenkinek a segítséget. Mindegyikből tanultam (persze főleg az derült ki belőle mennyi mindent nem tudok). Főleg a sebességgel lesz gondom, mert a legkisebb importálandó (konvertálandó) fájl mérete is több mint 100M. zila és randomly megoldása pofonegyszerű (csak ismerni kell a megfelelő parancsot) kis állományoknál gyors is. bsh által javasolt konvertáló prg egész használhatónak tűnik, bár a visual fox-os dbf-eket az sem tudja kezelni, az sdf-el viszont elboldogul.
Annak azért még örülnék, ha valamelyikőtök megtudná mondani, hogy a kis php-s szösszenetemben miért nem működik az eval($sqlparancs) sor.
üdv pl509
7

Manual

zila · 2008. Már. 20. (Cs), 15.08
Mert az eval php kódot tartalmazó stringet értelmez. Neked meg az kell, hogy végrehajts egy sql utasítást:
mysql_query($sql);
Nem kell eval egyáltalán...

Ha a sebesség problémás, akkor a te megoldásod csak ront a dolgon, és persze teljesen felesleges egy sql parsert és loadert írni amikor ezt natívan is megeszi az adatbáziskezelő. Ja és betöltöd memóriába a teljes sql file-t ami megint csak problémás lehet, főleg nagy fileoknál.
4

tool

bsh · 2008. Már. 20. (Cs), 07.46
Én ezt használtam erre a problémára:

http://pcwin.com/Business___Finance/CONVERT__English_/index.htm

Remélem neked is segít.
8

DBF Converter

darklight9 · 2010. Szep. 7. (K), 10.28
Köszi a linket, nekem is ez volt a problémám, de amikor kipróbáltam, akkor láttam, hogy nem tud .sql-be konvertálni, ezért ajánlanék egy másik programot:

DBF Converter:
Convert DBF into XLS, CSV, XML, HTML, RTF, SQL and more. Filter data with ease.


Trial verziója ingyenes, és egy konvertálásra elég ;)