Anonymní profil MeFi100 – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil MeFi100 – Programujte.comAnonymní profil MeFi100 – Programujte.com

 

Příspěvky odeslané z IP adresy 193.85.188.–

Visual Basic › Omezení importu z Excelu do…
24. 9. 2014   #194214

Mám trable s importem dat z excelu do accessu pomocí VBA. Kód je následující:

Sub ImportXLS()
Dim db As DAO.Database
Set db = CurrentDb
On Error Resume Next:   db.TableDefs.Delete "Helios_testImport":   On Error GoTo 0
db.TableDefs.Refresh

DoCmd.TransferSpreadsheet _
    TransferType:=acImport, _
    SpreadsheetType:=acSpreadsheetTypeExcel9, _
    TableName:="Test1", _
    FileName:="C:\Poducty\Poducty.xlsx", _
    HasFieldNames:=False, _
    Range:="List1!A2:F"
    db.TableDefs.Refresh
CurrentDb.TableDefs("Test1").Fields("F1").Name = "Nazev"
CurrentDb.TableDefs("Test1").Fields("F2").Name = "CisloRS"
CurrentDb.TableDefs("Test1").Fields("F3").Name = "CisloPoductu"
CurrentDb.TableDefs("Test1").Fields("F4").Name = "Mena"
CurrentDb.TableDefs("Test1").Fields("F5").Name = "Zustatek"
CurrentDb.TableDefs("Test1").Fields("F6").Name = "Platnost"
CurrentDb.TableDefs("Test1").Fields("F7").Name = "JistotaCM"

db.TableDefs.Refresh

db.Close:   Set db = Nothing

End Sub

Zjistil jsem ale, že excel obsahuje duplicitní hodnoty na primárním klíči, nevalidoní hodnoty mají Platnost = "Ne". Je možné v rámci tohoto kódu jednoduše zamezit načtení řádků, kde je platnost Ne, nebo vytvořit makro na mazaní takových řádků ještě před spuštěním této části kódu?

MS SQL › Import do Access přes makro
27. 8. 2014   #193370

Tak jsem si sám zjistil, jak to jde :-)

MS SQL › Import do Access přes makro
27. 8. 2014   #193360

Zkouším importovat tabulku pomocí makra do access 2013. Základní makro je jednoduché:

Sub ImportXLS()
Dim db As DAO.Database
Set db = CurrentDb
On Error Resume Next:   db.TableDefs.Delete "Helios_testImport":   On Error GoTo 0
db.TableDefs.Refresh
DoCmd.TransferSpreadsheet _
    TransferType:=acImport, _
    SpreadsheetType:=acSpreadsheetTypeExcel9, _
    TableName:="Test", _
    FileName:="C:\Users\mezeraf\Desktop\Podúčty\Helios_test.xlsx", _
    HasFieldNames:=True, _
    Range:="List1!A1:H6504"
db.TableDefs.Refresh
db.Close:   Set db = Nothing
End Sub

Potíž nastane, když chci, aby se sloupce jmenovaly podle sloupců v tabulce a nikoliv, tak, jak se importuje z Excelu (včetně českých znaků, které následně dělají v Accessu potíže). Tam mi hlásí chybu, ať jsem nastavil Field na False nebo měnil Range.

V rámci Range mám taktéž problém, protože potřebuji načíst všechny záznamy (jejich počet se může měnit), pokud však nastavím Range jen na hodnoty A:H, hlásí mi makro chybu (neexistenci pole).

Nevíte jak tohle ošetřit. Moc dík. 

MeFi100
MS SQL › Propojení tabulek + výpočty
26. 8. 2014   #193345

A komplet dohromady, jak jsem potřeboval je:

SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, Nz(T_Jistoty.Jistota, 0) AS Jistota, Nz(T_Opravy.Oprava, 0) AS Oprava, [T_Poducty.Zustatek]+[Jistota]+[Oprava] AS Suma, T_Meny.Kurz, [Suma]*[T_Meny.Kurz] AS Celkem
FROM 
((T_Poducty LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID) 
LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID) 
LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;

Ještě jednou všem moc díky.

MeFi100
MS SQL › Propojení tabulek + výpočty
26. 8. 2014   #193344

Díky moc za rady. Jsem poněkud pomalejší. Funguje mi takto:

SELECT
     T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
    ((T_Poducty
    LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID)
    LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID)
    LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;

MeFi100
MS SQL › Propojení tabulek + výpočty
26. 8. 2014   #193341

Dík za tip! Nz funguje bez potíží včetně sumy. Tak už mě trápí jenom to spojení. Samostatně jsem schopen poskládat v rámci postupných dotazů. Pokud však chci vše v jednom a vyberu vše, co potřebuju, pod sebe dám 3 x LEFT JOIN, napíše mi syntaktickou chybu. Přitom jsem to kontroloval a mám snad vše v pohodě:

SELECT
     T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
    Poducty
    LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID
    LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID
    LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;

Hlásí to chybu syntaxe (chybí operátor) na konci řádku  

Poducty
LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID

MeFi100
MS SQL › Propojení tabulek + výpočty
25. 8. 2014   #193323

Upravil jsem diakritiku, přesto se stále potýkám se dvěma problémy. První z nich je u LEFT JOIN. Pokud napíšu jeden, je to v pohodě. Pokud však dám:

SELECT
     T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek, T_Jistoty.Jistota, T_Opravy.Oprava, T_Meny.Kurz
FROM
    Poducty
    LEFT JOIN T_Jistoty ON T_poducty.ID = T_Jistoty.ID
    LEFT JOIN T_Opravy ON T_Poducty.ID = T_Opravy.ID
    LEFT JOIN T_Meny ON T_Poducty.Mena = T_Meny.Mena;

Access mi napíše: Syntaktická chyba (chybí operátor) v dotazovém výrazu T_Poducty.ID = T_Jistoty.ID LEFT JOIN ....

druhou věc, kterou se mi nepodařilo vyřešit je součet polí:

Tento příkaz mi píše nesprávný počet argumentů ve výrazu (ISNULL...

SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek,T_Jistoty.Jistota, (ISNULL([T_Poducty.Zustatek], 0))+(ISNULL([T_Jistoty.Jistota], 0)) AS SUMA
FROM
T_Poducty
LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID;

A standardní 

SELECT T_Poducty.ID, T_Poducty.Mena, T_Poducty.Zustatek,T_Jistoty.Jistota, [T_Poducty.Zustatek]+[T_Jistoty.Jistota] AS SUMA
FROM
T_Poducty
LEFT JOIN T_Jistoty ON T_Poducty.ID = T_Jistoty.ID;

mi sečte pouze buňky, ve kterých je hodnota ve sloupci Jistina. Tam, kde je pouze Zůstatek, tam součet neproběhne. Díky za pomoc.

MeFi100
MS SQL › Propojení tabulek + výpočty
20. 8. 2014   #193218

Příkaz (nemám teď přístup, ale takhle přibližně to bylo):

SELECT Podúčty.ID, Podúčty.Měna, Podúčty.Zůstatek, Jistoty.JistotaCM, Opravy.OpravaČástkyCM, Kurzy.Kurz,
Součet = Podúčty.Zůstatek + Jistoty.JistotaCM + Opravy.OpravaČástkyCM,
CM = součet * Kurzy.Kurz
FROM Podúčty LEFT JOIN Jistoty ON Podúčty.ID = Jistoty.ID LEFT JOIN Opravy ON Podúčty.ID = Opravy.ID LEFT JOIN Kurzy ON Podúčty.Měna = Kurzy.Měna;

Jinak díky moc za rychlé odezvy. FM 

MeFi100
MS SQL › Propojení tabulek + výpočty
19. 8. 2014   #193179

Mám drobný problém. Spojil jsem tabulky joinem a potřebuji sečíst hodnoty z tabulek (zustatek1, zustatek2). Bohužel mi nejde sečíst. Myslím, že je to tím, že díky spojení tabulky se 100.000 záznamy a tabulky, kde je záznamů pár desítek byly doplněny chybějící záznamy hodnotou null. Zkoušel jsem UPDATE pohledu (sloupce zůstatek 2), tak, aby hodnotu null přepsal na 0. Bohužel mi to napsalo, že že nemůže být provedeno z důvodu porušení kontrolních pravidel. Nevíte, jak bych mohl tento problém obejít? Díky.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý