VBA Import Excel Sheet to Acces

VBA Import Excel Sheet to Acces
2021-11-16T21:36:17+01:00
2021-11-17T12:07:23+01:00
2022-12-06T22:41:54+01:00
szilkov
Sziasztok, 

Excel táblát szeretnék importálni Access-be. Access-hez nem nagyon értek (még), ezért interneten keresegéltem. Excelből indítom a makrót, nem tudom hogy ez okozta-e a problémámat, de olyan oldalalakt is láttam, ahol ezt a kódot Access-be írták bele.
Az alábbi kódot találtam:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, strTableName, strFileName, blnHasHeadings
Meg is örültem neki, a teljes sheet-et  beolvassa, minden működött. 
Mindaddig, amíg ki nem derült, hogy még vagy 25000 üres sort is bemásolt. (Több forrást is néztem, ezek szerint nem jókat, és sehol nem említették, hogy így probéma lesz az üres sorokkal). Mivel szerintem nem létezik üres sor nélküli teljes excel tábla és access-ben is van "is not null" érték, ezért fel sem merült bennem, hogy üres sort fog importálni. A próbálkozás végére 110000 üres sort sikerült kreálnom. 
Most ezt egy kollégám, aki már nem is nálunk van, sőt nem is a munkája része ezt rendbe teszi szívességből, mert annak idején ő hozta létre ezt a táblát, de nem szeretném megint elrontani, ezért szeretném tőletek megkérdezni, hogy további kutakodásaim eredménye jó lesz-e. 
A hivatalos doksi böngészése után megtaláltam, hogy lehet range-et megadni, ami string formában kell legyen és ne legyen abszolút, és legyen benne a sheet neve is. 
Egy msbox-ban kiirattam és eddig lefuttattam a kódot, és jól írja ki a importálandó adatokat. 
Az alábbi lenne az új kódom:

dataToExport=Activesheet.Name & "!" & Range("a1:p"& Range("a1").currentregion.rows.count).address(false, false) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, strTableName, strFileName, blnHasHeading, dataToExports
És lenne még egy kérdésem:
A dokisban az volt, a currentDB-be imprtálja az adatokat. Vagyis abba, ami éppen nyitva van. 
Tehát, ha nincs nyitva, akkor nem fogja tudni beimportálni? (furcsálltam is, hogy nincs elérési út megadva)
Tehát ha szeretném úgy, hogy nincs megnyitva, akkor hozzal létre Access object-et és connectionstringgel nyissak egy connectiont és nyissam meg a DB,után importálok és lezárom a connection? Jól gondolom?
A connection-nel való csatlakozás nem lesz gond, ha a DB egyébként nyitva van? Mert szinte mindig nyitva van, mert állandóan használjuk. 

Sajnos csak élesben tudnám ezeket tesztelni, ezért szeretnék biztosra menni. 
Köszönöm a segítséget. 
Sz
Mutasd a teljes hozzászólást!
Szia, 

az üres sorokra a kérdés: 

szerintem az access azt a cellatartományt importálja be amit nem üresnek érzékel.
tehát az excel táblázatodban valahol lent a mélyben van valami érték a 25e. sor környékén, esetleg valamilyen formázás. 
ha az értékes terület alatti sorokat kitörlöd, akkor helyreáll az import szerintem. 

másik kérdés:
jól okoskodsz. 
ugyan nem ismerem az accesst- de adatbáziskezelőként illik neki több connectet fogadni, így nem lehet probléma elvileg ha más is használja. 

tesztelés:
az élesben tesztelés nem szokott jó megoldás lenni. 
tesztkörnyezetet viszont nem olyan macerás létrehozni,  nem igazán ismerek olyan körülményt amikor nem éri meg a befektetett időt.
Mutasd a teljes hozzászólást!

  • Szia!

    Sose élesbe tesztelj.

    Fél perc egy másolatot készíteni egy access fileról.
    De elég ha csak a céltábla marad benne.

    Ami viszton problémás:

    Kinek, minek lesz a felelősége az ellenőrzés?

    Hiszen ha az üres sorokat nézzük akkor azt korrigálni fél perc sincs.
    Ha rossz táblát importálnak bele, vagy rossz adatokkal, vagy egy oszloppal eltolva...

    Azt kinek kell ellenőríznie?
    Azt ki fogja javítani?

    Milyen gyakori lenne ez az impotálás?
    Hány ember fogja végrejatani? Egy több?

    Amire szeretnék rámutatni, az az hogy ellenőrzés nélkül nem teszünk semmit sem az adatbázisba, még ha úgy gondoljuk is hogy az jó.
    Max akkor ha

    - egyszeri eset kényszerből
    - mentés után
    - az importálónak módjában áll ellenőrizni/javítani a táblát, és tisztában van a tábla struktúrájáva, a mezők szerepével.
    - + ami nagyon fontos, az adatbázis használata erre az időre felfüggesztve a hálózat számára. Kivéve ha az import  egy nem használt tmp tábla szerűségbe történik...

    Egyéb esetben  a mezők formátumának ellenőzése a minumum.
    Importálás elött természetesen, vagy ha közben akkor minimum visszavonható tranzakción belül.

    A mezők ellenőrzése mellett még szükség lehet más rekord szintű ellenőrzésre is, de ez már adat és táblafüggő.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd