dbf konvertálása sql-be (mysql-be)
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
■ 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
CSV
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
dbf konvertálása sqk-be (mysql-be)
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
phpMyAdmin code
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
cli
dbf konvertálása sql-be (mysql-be)
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
Manual
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.
tool
http://pcwin.com/Business___Finance/CONVERT__English_/index.htm
Remélem neked is segít.
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 ;)