Prikazi cijelu temu 27.09.2017 13:41
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Lokacija:zagreb


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):
  1. Dim FF As Integer
  2. Dim imeFile As String
  3. FF = FreeFile()
  4.  
  5. exportName = "ime_datoteke.sql"
  6.  
  7. resetiranje varijabli
  8. celija1 = "": celija2 = ""
  9. PrintString = ""
  10.  
  11. Open exportName For Output As #FF
  12.         Print #FF, "TRUNCATE TABLE tab_1;"
  13.         Print #FF, "TRUNCATE TABLE tab_2;"
  14.         Print #FF, "INSERT INTO tab_1 (ID, ime)"
  15.         Print #FF, "VALUES"
  16.         For red = 1 To zadnjiRed /ovo mozete mijenjati
  17.  
  18.             celija1 = Cells(red, 2).Value 'uzima ID iz celije
  19.            celija2 = Cells(red, 3).Value 'uzima ime iz celije
  20.            
  21.             If PrintString = "" Then
  22.                 /ako je PrintString prazan , radi se o prvom redu pa nema zareza na pocetku
  23.                 PrintString = "('" & celija1 & "','" & celija2 & "')"
  24.             Else
  25.                 /ako PrintString nije prazan, podaci se nadovezuju pa treba zarez na pocetku
  26.                 PrintString = ",('" & celija1 & "','" & celija2 & "')"
  27.             End If
  28.             Print #FF, PrintString /upisemo PrintString u datoteku
  29.  
  30.         Next red /sljedeci red
  31.  
  32.         Print #FF, ";" /kada smo dosli do kraja upisemo na kraj ;
  33. Close #FF /zatvorimo datoteku za upisivanje
  34.  
  35.  
  36. mozda cete trebati obraditi podatke nakon upisivanja, kao ja, pa onda nastvljate upisivati u istu datoteku
  37. nove podatke.
  38.  
  39. neki kod koji obraduje celije i podatke u excelu
  40.  
  41. Open exportName For Append As #FF
  42.         Print #FF, "INSERT INTO tab_2 (ID, tezina)"
  43.         Print #FF, "VALUES"
  44.        
  45.         For red = 1 To zadnjiRed
  46.             celija1 = Cells(red, 2).Value 'ID
  47.            celija2 = Cells(red, 4).Value 'tezina
  48.  
  49.             If PrintString = "" Then
  50.                 PrintString = "('" & celija1 & "','" & celija2 & "')"
  51.             Else
  52.                 PrintString = ",('" & celija1 & "','" & celija2 & "')"
  53.             End If
  54.             Print #FF, PrintString
  55.            
  56.         Next red
  57.         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):
  1. function exportData(prviRed, zadnjiRed, imeDatoteke, data_1, data_2)
  2.        
  3.         Open imeDatoteke For Append As #FF
  4.                 Print #FF, "INSERT INTO tab_2 (data_1, data_2)"
  5.                 Print #FF, "VALUES"
  6.        
  7.                 For red = prviRed To zadnjiRed
  8.                     celija1 = Cells(red, 2).Value 'ID
  9.                     celija2 = Cells(red, 4).Value 'tezina
  10.  
  11.                     If PrintString = "" Then
  12.                         PrintString = "('" & celija1 & "','" & celija2 & "')"
  13.                     Else
  14.                         PrintString = ",('" & celija1 & "','" & celija2 & "')"
  15.                     End If
  16.                        
  17.                         Print #FF, PrintString
  18.            
  19.                 Next red
  20.                 Print #FF, ";"
  21.         Close #FF
  22. end fuction

pozovemo ju sa :

    
PreuzmiIzvorni kôd (Visual Basic):
  1. if exportData(1,20,ime.sql,ID,ime) = False then
  2.                 msgbox "greska u izvozu"
  3.         else
  4.                 msgbox "izvoz uspijesan"
  5.         end if
  6. i
  7.         if exportData(1,20,ime.sql,ID,tezina) = False then
  8.                 msgbox "greska u izvozu"
  9.         else
  10.                 msgbox "izvoz uspijesan"
  11.         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.