ďťż
 
MySQL-import z .dbf ďťż
 
MySQL-import z .dbf
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

MySQL-import z .dbf



Zientek - 27-12-2005 10:17
MySQL-import z .dbf
  Witam,
Mam tabelkę product_code o definicji jak niżej (MySql). Tłumaczy ona kody
produktów pomiedzy bazą, a danymi z programu magazynowego (.dbf).
Potrzebuję okresowo importować nowe wpisy z dbf'a, przy czym mogą one mieć
już istniejące identyfikatory. Zależy mi na INSERCIE jeśli wpisu jeszcze
nie ma, a na UPDACIE jeżeli już jest. Niestety nie znalazłem dobrego
rozwiązania dla mysql. Odpowiednika składni:
MERGE...
WHEN EXISTS UPDATE...
ELSE INSERT...
z Oracla nie znalazłem.

Z góry dzięki za pomoc,
Pozdrawiam
zientek

CREATE TABLE `shop`.`product_code` (
`product_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`product_code` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY(`product_id`),
UNIQUE INDEX `product_code_product_code_i`(`product_code`)
)
TYPE = InnoDB
COMMENT = 'Tłumacz kodów produktów, na kody z zewnętrznej bazy.';





Slawomir Cichy - 27-12-2005 10:17

  Zientek wrote:
> Witam,
> Mam tabelkę product_code o definicji jak niżej (MySql). Tłumaczy ona kody
> produktów pomiedzy bazą, a danymi z programu magazynowego (.dbf).
> Potrzebuję okresowo importować nowe wpisy z dbf'a, przy czym mogą one mieć
> już istniejące identyfikatory. Zależy mi na INSERCIE jeśli wpisu jeszcze
> nie ma, a na UPDACIE jeżeli już jest. Niestety nie znalazłem dobrego
> rozwiązania dla mysql. Odpowiednika składni:
> MERGE...
> WHEN EXISTS UPDATE...
> ELSE INSERT...
> z Oracla nie znalazłem.
>
> Z góry dzięki za pomoc,
> Pozdrawiam
> zientek
>
> CREATE TABLE `shop`.`product_code` (
> `product_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> `product_code` INT(11) UNSIGNED NOT NULL,
> PRIMARY KEY(`product_id`),
> UNIQUE INDEX `product_code_product_code_i`(`product_code`)
> )
> TYPE = InnoDB
> COMMENT = 'Tłumacz kodów produktów, na kody z zewnętrznej bazy.';
>

Pewnym substytutem moze byc wykorzystanie polecenia LOAD DATA w opcja
REPLACE

Przyklad dla tabeli:
CREATE TABLE `test` (
`str` varchar(30) NOT NULL default '',
`str1` varchar(30) default NULL,
PRIMARY KEY (`str`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

LOAD DATA LOCAL INFILE '~root/data.dbf' REPLACE INTO TABLE test FIELDS
TERMINATED BY ';';

format danych w pliku

wart1; wart2
wart2; wart1
wart3; wart2
wart4; wart3
wart5; wart4




Piotr =?iso-8859-2?Q?Kuli=F1ski?= - 27-12-2005 10:18

  Roku Pańskiego 2005,
na pl.comp.bazy-danych,
człowiek (??) *Slawomir Cichy* napisał(a):

> Zientek wrote:
>> Witam,
>> Mam tabelkę product_code o definicji jak niżej (MySql). Tłumaczy ona kody
>> produktów pomiedzy bazą, a danymi z programu magazynowego (.dbf).
>> Potrzebuję okresowo importować nowe wpisy z dbf'a, przy czym mogą one mieć
>> już istniejące identyfikatory. Zależy mi na INSERCIE jeśli wpisu jeszcze
>> nie ma, a na UPDACIE jeżeli już jest. Niestety nie znalazłem dobrego
>> rozwiązania dla mysql. Odpowiednika składni:
>> MERGE...
>> WHEN EXISTS UPDATE...
>> ELSE INSERT...
>> z Oracla nie znalazłem.
>>
>> Z góry dzięki za pomoc,
>> Pozdrawiam
>> zientek
>>
>> CREATE TABLE `shop`.`product_code` (
>> `product_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
>> `product_code` INT(11) UNSIGNED NOT NULL,
>> PRIMARY KEY(`product_id`),
>> UNIQUE INDEX `product_code_product_code_i`(`product_code`)
>> )
>> TYPE = InnoDB
>> COMMENT = 'Tłumacz kodów produktów, na kody z zewnętrznej bazy.';
>>
>
> Pewnym substytutem moze byc wykorzystanie polecenia LOAD DATA w opcja
> REPLACE
>
> Przyklad dla tabeli:
> CREATE TABLE `test` (
> `str` varchar(30) NOT NULL default '',
> `str1` varchar(30) default NULL,
> PRIMARY KEY (`str`)
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
>
> LOAD DATA LOCAL INFILE '~root/data.dbf' REPLACE INTO TABLE test FIELDS
> TERMINATED BY ';';
>
> format danych w pliku
>
> wart1; wart2
> wart2; wart1
> wart3; wart2
> wart4; wart3
> wart5; wart4

Ciekawe.. od kiedy format pliku dbf jest "podzielony" średnikami ?,
zapominasz o nagłówku pliku dbf.
....
można wykorzystać ODBC do utworzenia źródła plików do importu. Niestety z
moich (nie przeczę krótkich testów) wynika że przekłamywane są pola
numeryczne.
Osobiście sam sobie napisałem programik do tworzenia plików właśnie w
podobym formacie jak to napisałeś wyżej: każdy wiersz to rekord, w
rekordzie pola oddzielone separatorem, dodatkowo tworzony jest plik typu
..sql, który zawiera instrukcję tworzenia tabeli i dołączani (LOAD
DATA...)rekordów z utworzonego zbioru(ów) tekstowych. Jedyny mankament
(dość upierdliwy) to niemożność przerzucania pól typu MEMO. Nie
potrzebowałem tego więc nie dopisałem :(
Jeśli nie znajdziesz innego rozwiązania to mogę podesłać programik na priv.
--
pozdrawiam
piotr, gg i skype w X-nagłówku posta, e-mail: zmień "wpw" na "wp"
Nic nie stoi na przeszkodzie, co by sobie przeszkody nie stworzyć :)




Bartosz 'briest' Stepien - 27-12-2005 10:18

  Mistrz Zientek rzekł:
> już istniejące identyfikatory. Zależy mi na INSERCIE jeśli wpisu jeszcze
> nie ma, a na UPDACIE jeżeli już jest. Niestety nie znalazłem dobrego
> rozwiązania dla mysql.

Może REPLACE?

REPLACE works exactly like INSERT, except that if an old record in
the table has the same value as a new record for a PRIMARY KEY or a
UNIQUE index, the old record is deleted before the new record is
inserted. (...)
REPLACE is a MySQL extension to the SQL standard.

--
Świat gryzoni jest brutalny i pełen wzajemnej nienawiści.





Slawomir Cichy - 29-12-2005 14:33

  Piotr Kuliński wrote:
>
> Ciekawe.. od kiedy format pliku dbf jest "podzielony" średnikami ?,
> zapominasz o nagłówku pliku dbf.
> ...

Oczywiscie, ze nie zapomnialem, ale wydawalo mi sie, ze format .dbf jest
takim prostym formatem, ze stworzenie odpowiedniego konwerotora nie
powinno sprawic wiekszego problemu ;)




Zientek - 29-12-2005 14:33

  Bartosz 'briest' Stepien wrote:

> Mistrz Zientek rzekł:
>> już istniejące identyfikatory. Zależy mi na INSERCIE jeśli wpisu jeszcze
>> nie ma, a na UPDACIE jeżeli już jest. Niestety nie znalazłem dobrego
>> rozwiązania dla mysql.
>
> Może REPLACE?
>
> REPLACE works exactly like INSERT, except that if an old record in
> the table has the same value as a new record for a PRIMARY KEY or a
> UNIQUE index, the old record is deleted before the new record is
> inserted. (...)
> REPLACE is a MySQL extension to the SQL standard.
>

O to mi chodziło. Nie dość że działa, to jeszcze jest przyzwoicie wydajne.
Dzięki :)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com