Predmet:Re: Uvoz Podataka - Sql Naredbe
rijesio , a bilo je vise nego jednostavno samo mi je trebalo vremna da otkrijem.
Recimo da imamo neku bazu: ime_baze i u njoj 2 table tab_1 i tab_2.
Te se table sastoje od kolona, a u svakoj koloni su podaci.
Pa tako tab_1 ima kolone ID ime , a tab_2 ima kolone ID tezina
Ime_baze
tab_1
---------
ID | ime
tab_2
---------
ID | tezina
potrebno je iz exela prebaciti podatke u te dvije table na taj nacin da
prvo obrisemo stare podatke, a onda upisemo nove.
koristeci WRITE naredbu u VBA dobijamo txt doument u kojem su podaci sa navodnicima,
a to nam ne pase jer pokretanjem SQL on nemoze to izvrsiti.
Stvar je vrlo jednostavna umjesto WRITE naredbe koristimo PRINT naredbu.
evo kako to izgleda u VBA, samo dio koda
PreuzmiIzvorni kôd (Visual Basic):Dim FF As Integer
Dim imeFile As String
FF = FreeFile()
exportName = "ime_datoteke.sql"
resetiranje varijabli
celija1 = "": celija2 = ""
PrintString = ""
Open exportName For Output As #FF
Print #FF, "TRUNCATE TABLE tab_1;"
Print #FF, "TRUNCATE TABLE tab_2;"
Print #FF, "INSERT INTO tab_1 (ID, ime)"
Print #FF, "VALUES"
For red = 1 To zadnjiRed /ovo mozete mijenjati
celija1 = Cells(red, 2).Value 'uzima ID iz celije
celija2 = Cells(red, 3).Value 'uzima ime iz celije
If PrintString = "" Then
/ako je PrintString prazan , radi se o prvom redu pa nema zareza na pocetku
PrintString = "('" & celija1 & "','" & celija2 & "')"
Else
/ako PrintString nije prazan, podaci se nadovezuju pa treba zarez na pocetku
PrintString = ",('" & celija1 & "','" & celija2 & "')"
End If
Print #FF, PrintString /upisemo PrintString u datoteku
Next red /sljedeci red
Print #FF, ";" /kada smo dosli do kraja upisemo na kraj ;
Close #FF /zatvorimo datoteku za upisivanje
mozda cete trebati obraditi podatke nakon upisivanja, kao ja, pa onda nastvljate upisivati u istu datoteku
nove podatke.
neki kod koji obraduje celije i podatke u excelu
Open exportName For Append As #FF
Print #FF, "INSERT INTO tab_2 (ID, tezina)"
Print #FF, "VALUES"
For red = 1 To zadnjiRed
celija1 = Cells(red, 2).Value 'ID
celija2 = Cells(red, 4).Value 'tezina
If PrintString = "" Then
PrintString = "('" & celija1 & "','" & celija2 & "')"
Else
PrintString = ",('" & celija1 & "','" & celija2 & "')"
End If
Print #FF, PrintString
Next red
Print #FF, ";"
Close #FF
nakon sto dobijete izlaznu datoteku jednostavno u phpmyadmin panelu izaberete
Import, odaberete ime_datoteke.sql i pokrenete
stari podaci u tab_1 i tab_2 bice prvo izbrisani a zatim ce se upload novi
i to je to.
mozda je moguce napraviti funkciju upisa podataka, ali to nisam probao.
Jednostavno sam dva puta napisao kod upisa podataka u datoteku.
PreuzmiIzvorni kôd (Visual Basic):function exportData(prviRed, zadnjiRed, imeDatoteke, data_1, data_2)
Open imeDatoteke For Append As #FF
Print #FF, "INSERT INTO tab_2 (data_1, data_2)"
Print #FF, "VALUES"
For red = prviRed To zadnjiRed
celija1 = Cells(red, 2).Value 'ID
celija2 = Cells(red, 4).Value 'tezina
If PrintString = "" Then
PrintString = "('" & celija1 & "','" & celija2 & "')"
Else
PrintString = ",('" & celija1 & "','" & celija2 & "')"
End If
Print #FF, PrintString
Next red
Print #FF, ";"
Close #FF
end fuction
pozovemo ju sa :
PreuzmiIzvorni kôd (Visual Basic):if exportData(1,20,ime.sql,ID,ime) = False then
msgbox "greska u izvozu"
else
msgbox "izvoz uspijesan"
end if
i
if exportData(1,20,ime.sql,ID,tezina) = False then
msgbox "greska u izvozu"
else
msgbox "izvoz uspijesan"
end if
naravno da bi trebalo u tome kodu biti jos dosta toga za provjeru gresaka ili nesto drugo ali za jednostavni izvoz meni koristi
zivot je moja domovina.