< návrat zpět

MS Excel


Téma: Excel do => microsoft sql rss

Zaslal/a 9.5.2018 12:25

Dobrý den, mám dotaz ohledně propojení, chtěl bych se zeptat, jak v excelu udělat VBA, aby se při spuštění data nahráli do databaze "Table" sloupec A = jméno; slouec B = čas; sloupec C = Důvod, pokud není prazdný

Zaslat odpověď >

#040322
Jeza.m
V referencích VBA přidat referenci na Microsoft ActiveX Data Objects 2.8 Library.
a pak následující kód...
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=NazevDB;Data Source=NazevServeru"
conn.Open
For rd = 2 To ActiveSheet.UsedRange.Rows.Count
If Cells(rd, 1) <> "" Then
conn.Execute ("INSERT INTO TABULKA (JMENO, CAS, DUVOD) VALUES ('" & Cells(rd, 1) & "', " & Cells(rd, 2) & ", '" & Cells(rd, 3) & "'")
End If
Next
conn.Close


Použitý connection string využívá ověření windows, nikoliv SQL.
M@citovat
#040347
avatar
Děkuji za radu, mohu poprosit o ukázku, teprve s tím začínám a není mi to úplně jasné, zkoušel jsem to rozchodit, ale neúspěšně.

Server: DOMA123\SQLEXPRESS
Databáze: Table
Uživatel: Dejwing
Heslo: test

Děkuji 1citovat
#040349
Jeza.m
V příloze je příklad, Je potřeba v makru specifikovat tabulku, kam se má vkládat. No a pak pokud SQL běží doma, tak si nejsem jistý jestli by nemělo běžet přes localhost\sqlexpress.

M@
Příloha: zip40349_sql.zip (14kB, staženo 53x)
citovat
#040352
avatar
Děkuji za příklad, bohužel mi to v excelu 2010 hodí tuto chybu:

Run time error 2147467259 (80004005)

Automation Error
Unspecified Error

V příloze přikládám jak mám databázi uspořádanou 1
Příloha: png40352_ukazka.png.png (15kB, staženo 92x)
40352_ukazka.png.png
citovat
#040362
Jeza.m
Z toho plyne, že Databáze se nejmenuje Table, ale merkur, což je potřeba upravit v connection stringu
Initial Catalog=merkur
Tabulka se jmenuje TABULKA, takže je potřeba upravit i SQl.
No a poslední dost podstatné je ten čas. Jelikož se nejedná o délku trvání (číslo), ale o datum a čas, tak je potřeba ho zformátovat do podoby pro SQL, což se mi čistě vložením obsahu buňky nikdy nepodařilo, takže je potřeba jej ošetřit v dotazu...
conn.Execute ("INSERT INTO TABULKA (JMENO, CAS, DUVOD) VALUES ('" & Cells(rd, 1) & "', '" & Replace(CStr(Format(Cells(rd, 2), "yyyy.mm.dd HH:MM:SS")), ".", "/") & "', '" & Cells(rd, 3) & "')")

Určitě by šlo ošetřit i v SQL jazyce přeformátováním, ale mě se to lépe dělá už ve VB :-).

M@citovat
#040404
avatar
Krásná práce, ještě jsem tam musel udělat nějaké úpravy ohledně formátu času a funguje to! :)

Ještě bych měl dva dotazy, když bych chtěl po odeslání dotazu vždy zapsat čas odeslání a přidat přihlášení / odhlášení? Abych mohl nasimulovat, "kdo je online", abych si v excelu mohl dát dotaz kdo je online a co je důvodem.

Druhý dotaz je: Dá se excelem opravovat záznam v databázi přes VBA? Jak by měl takový kód vypadat?

Ještě jednou děkuji za předchozí pomoc!!! 1 1citovat
#040405
Jeza.m
Co se opravy záznamu týče, tak každý záznam v SQL by měl mít jedinečné ID, přes toto pak lze použít UPDATE dotaz.
Co se makra na straně excelu týče tak bude v podstatě stejné jako v případě vkládání, akorát místo INSERTOVÉHO dotazu se bude předávat UPDATE dotaz, který má jinou syntaxi a je nutno mu dodat podmínku, která jednoznačně identifikuje záznam který chcete UPDATOVAT
"UPDATE TABULKA SET POLE = 'NovaHodnota' WHERE ID = 1".

Co se času vložení týče, tak v SQL lze vytvořit POLE typu datetime a nejlépe mu i nastavit výchozí hodnotu na SYSDATETIME(), čím se do daného pole s každým novým záznamem vloží aktuální datum a čas, tudíž vůbec není třeba řešit v dotazu.

S tím přihlášením a odhlášením už jsem to moc nepobral :-), přihlášení a odhlášení kam?

M@citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32