Arşive Gönderme

Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın mehmetdemiral,

Sorunları teker teker ele alıp çözümlemek gerekiyor. Yapmak istediklerinizin tümü mümkün. Teker teker ele alıp çözmeye başlayalım.

İyi çalışmalar
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Sayın mehmetdemiral,

Sorunları teker teker ele alıp çözümlemek gerekiyor. Yapmak istediklerinizin tümü mümkün. Teker teker ele alıp çözmeye başlayalım.

İyi çalışmalar
:)))
Sevgili Modalı.. Bu forumda yazdığım en karışık mesaj olduğunu kabul ediyorum. Madde madde ele alacağım. Bana çok yardımlarınız olacağı kesin.. İlgilendiğiniz için teşekkürler...
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
1) .txt uzantılı bir veri yapısından Modalı ve karaayhan'ın önerileriyle oluşturduğum bir form aracılığı ile veri alarak access'e aktardım. Oluşan tablo ile çalışıyorum, tablodaki verilerin bir kısmını düzenledim. O sırada başka verilerle çalışmak istiyorum. Mevcut çalıştığım verileri arşivleyip verdiğim bir isimle istediğim bir klasöre .mdb olarak aktaracağım. Çünkü benim tablomda asıl txt tablosunda olmayan ve olması gerekmeyen, ama çalışma anında bana lazım olan veriler var.

(Bu bölüm mdb dosyasının arşivlenmesi konusu)

2) Arşive aktardığım bu mdb verilerini daha sonra çağırıp devam etmeliyim. Ama bu arada başka verilerle çalışacağım. Onlar da yapı olarak aynı türden veriler. Programa çağırdığımda yerlerine cuk oturuyorlar. Tabii onları tıpkı txt'den alırken olduğu gibi bir "gözat" yöntemi aracılığı ile çağırmalıyım.

(Bu bölüm Access'te bağlı tabloların "gözat yöntemiyle" çağırılması konusuyla ilgili. Bunu ilk maddede txt uzantısı için yapıyoruz. Örnekte de var)


3) Verilerle tüm işim bittiğinde ilk hallerine yani .txt hallerine, seçtiğim bir sorgu üzerinden bazı bölümlerini eleyerek dönüştüreceğim. Bu arada oluşacak dosyanın adı, benim mdb dosyamda aktarılan tablomda bir hücre olarak bulunuyor. Aktarırken onu da verilerimle birlikte kaydettim çünkü birden çok .txt dosyasını birleştirdim. Ama her bir kayıt öz olarak geldiği txt dosyasının adını da saklıyor. (Örneği incelerseniz kaynak txt dosyalarının ilk satırında dosya adı var. Bunu biz kayıtlara kodla yazdırdık)

(bu bölüm dosyaların tekrar txt uzantısıyla ve yapısı bozulmadan kaydedilmesiyle ilgili)


4) Böylece ms-dos tabanlı ana programın yapısına uygun olarak her biri 13.000 kayıtla sınırlı olan bir çok txt dosyası, verileri taşeron firma tarafından düzenlenerek tekrar geri gönderilebilecek. Bu düzenleme işlemini yaparken bizim oluşturduğumuz yapı, mesela A ilçesinin verilerini 8 ayrı txt dosyasından yararlanarak tek mdb dosyası haline getirecek. Ama geri gönderirken de yine 13.000 kayıtlı txt uzantılı, veriler arasında $ sekmeli yapı bozulmayacak. Bütün işlemler tamamlandı kalan tek şey birleştirilmiş verilerin bu şekilde mdb olarak arşivlenmesi ve işi biten dosyanın tekrar txt uzantılı dosyalar olarak parçalanması. Dediğim gibi bu parçalamada verilerin hepsi kullanılmadığından filtre etmek ve dosya adlarını da aktarım sırasında yine kendi içine yazdığımız dosyaadlari isimli hücreden almak gerekiyor. Filtre etmek için herhalde en güzel yöntem sorgu üzerinden yapmak ve bu arada dosyaadi hücresine göre de gruplamak olabilir.


(Bu bölüm de txt olarak aktarma işlemi sırasında bazı bölümlerinb alınmaması ve aynı anda birden çok dosya oluşturulması ile ilgili. Ayrıca oluşan dosya adının tablodaki kayıtlardan gruplanarak alınması gerekiyor.)


Bunlarla ilgili orijinal dosyalardan 2 adeti kısaltarak ekledim. Normalde içlerinde 13.000 kişi kayıtlı. Yani toplam 26.000 kayıt var. Ben 45-50 kişi aldım örnek olarak. Dosya formatını görmeniz için orijinal dosyayı aldım, içeri aktarılan veriler mdb olarak dışa verilmeli ve aynı menüden txt olarak kaydedilme işlemi de yapılabilmeli. Nasıl? Örnek herşeyi anlatıyor.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Merhaba,

mdb çıktısı için aşağıdaki yapı işinizi görecektir sanırım. txt çıktısı için aklıma gelen iki metot var: dosyalama ve ADO. ADO için küçük bir registry ayarı gerekebilir. ($ delimiter için)

Kod:
Sub Arsivleme()
[COLOR=DarkGreen] '// mdb çıktısı..[/COLOR]
    Call insert_into("c:\testVT.mdb", "test_tablo")
End Sub

Private Sub insert_into(destdir As String, tblname As String)
Dim cn As ADODB.Connection, db As DAO.Database

[COLOR=DarkGreen] '// Yeni veritabanı... [/COLOR]
Set db = CreateDatabase(destdir, dbLangTurkish)
db.Close

Set cn = CurrentProject.Connection

[COLOR=DarkGreen]'// sorgula ve yeni veritabanına yaz..[/COLOR]
cn.Execute _
"select * into [" & tblname & "] in '" & destdir & "' from [tblAlınanVeriler]"

Set db = Nothing
Set cn = Nothing
End Sub
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Sayın Zeki Gürsoy.. Çok teşekkür ederim. Deniyorum hemen..
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Kodlarda bazı değişiklikler yapmam gerekti ama çalıştı. Verilerin bir yedeğini c:\testVt.mdb adıyla aldık. Fakat daha sonra bu dosyayı silsem de

Set db = CreateDatabase(destdir, dbLangTurkish)


satırında hata veriyor ve program kırılıyor. Buradaki hata nedir?

Ayrıca bu dosyayı kaydedeceği yeri ve adını bize sorması sağlanamaz mı?. Biz daha sonra bu dosyayı tekrar geri yüklemeliyiz. Onu nasıl yaparız?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Ben de hata oluşmadı. Şunu da değişken tanımının hemen altına ilave edebilirsiniz.

Kod:
On Error Resume Next
If Dir(destdir) <> "" Then Kill destdir

If Err Then _
    MsgBox Err.Number & Chr(13) & Err.Description & _
    Chr(13) & "dosya kullan&#305;mda olabilir!", vbCritical: Exit Sub
Hedefi common dialog ile sormas&#305;n&#305; sa&#287;layabiliriz. &#350;urada bir a&#231;ma &#246;rne&#287;i var. Benzer &#351;ekilde kaydetme olarak tasarlan&#305;r.

http://www.accessforumlari.com/showthread.php?tid=204

Geri y&#252;klemeyi de basit SQL sorgusu ile yapar&#305;z.

Ama yar&#305;n bakal&#305;m art&#305;k. :)
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Bu kodlar&#305; ekleyince dosyan&#305;n olmas&#305; veya olmamas&#305; farketmeksizin kay&#305;t yap&#305;yor. &#350;imdi g&#252;zel oldu. Fakat di&#287;er link ile ilgili olarak dedi&#287;im gibi orada verdi&#287;iniz kodlar hata d&#246;nd&#252;rd&#252;. Ben hatan&#305;n nedenini anlayamad&#305;m. Kodlar aynen &#351;&#246;yle

Private Sub Komut21_Click()

Set dlg = CreateObject("MSComDlg.CommonDialog")

'// Filter syntax: &#304;sim |filtre|
strFilter = "Access dosyas&#305; (*.mdb)|*.mdb|"
strFilter = strFilter & "Excel dosyalar&#305; (*.xls)|*.xls|"
strFilter = strFilter & _
"Resim dosyalar&#305; (*.bmp,*.jpg,*.gif)|*.bmp;*.jpg;*.gif|"
strFilter = strFilter & "T&#252;m dosyalar (*.*)|*.*|"

With dlg
.DialogTitle = "Dosya se&#231;iniz..." '// Ba&#351;l&#305;k
.InitDir = "C:\" '// Varsay&#305;lan konum
.Flags = 4 '// Saltokunur se&#231;ene&#287;i disable olur
.Filter = strFilter
.FilterIndex = 4 '// Yukar&#305;daki filtrelerin varsay&#305;lan&#305;.(T&#252;m dosyalar)
.ShowOpen
If .Flags = 4 Then Exit Sub '// &#304;ptal tu&#351;uyla sonland&#305;r
End With

MsgBox dlg.fileName
End Sub

Dikkat ettiyseniz ilk ba&#351;taki Sub Test() b&#246;l&#252;m&#252; yerine
Private Sub Komut21_Click()
komutu geldi. Burada bir hata m&#305; yapt&#305;m ki? &#199;&#252;nk&#252;
Set dlg = CreateObject("MSComDlg.CommonDialog")
b&#246;l&#252;m&#252; hata veriyor. Program orada k&#305;r&#305;ld&#305;.
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Bu arada yard&#305;mlar&#305;n&#305;z i&#231;in te&#351;ekk&#252;r ederim. &#199;ok sa&#287;olun..
 
Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
CreateObject, ben de yine hata döndürmedi. İyi analiz edebilmek için hata iletisinin ne olduğunu da bilmek gerek. Eğer "ActiveX can't create object" gibi ileti aldıysanız referanslardan ilgili .ocx dosyasını ekleyin ve aşağıda düzenlediğim yapıyı deneyin.

Kod:
Private Sub Komut21_Click()
[COLOR=Blue] Dim dlg As New CommonDialog[/COLOR]

[COLOR=DarkGreen]'// Filter syntax: İsim |filtre|[/COLOR]
strFilter = "Access dosyası (*.mdb)|*.mdb|"
strFilter = strFilter & "Excel dosyaları (*.xls)|*.xls|"
strFilter = strFilter & _
"Resim dosyaları (*.bmp,*.jpg,*.gif)|*.bmp;*.jpg;*.gif|"
strFilter = strFilter & "Tüm dosyalar (*.*)|*.*|"

With dlg
    .DialogTitle = "Dosya seçiniz..." [COLOR=DarkGreen]'// Başlık[/COLOR]
    .InitDir = "C:\" [COLOR=DarkGreen]'// Varsayılan konum[/COLOR]
    .Flags = 4 [COLOR=DarkGreen]'// Saltokunur seçeneği disable olur[/COLOR]
    .Filter = strFilter
    .FilterIndex = 4 [COLOR=DarkGreen]'// Yukarıdaki filtrelerin varsayılanı.(Tüm dosyalar)[/COLOR]
    .ShowOpen
If .Flags = 4 Then Exit Sub [COLOR=DarkGreen]'// İptal tuşuyla sonlandır[/COLOR]
End With

MsgBox "Açılması istenen dosya adı : '" & dlg.FileName & "'"
End Sub
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,345
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Bu da kaydet diyalog örneğidir. Diyalog problemi çözüldüyse veri alma kısmına geçebiliriz.

Kod:
Private Sub Komut[COLOR=Red][B]XX[/B][/COLOR]_Click()
[COLOR=Blue]Dim dlg As New CommonDialog[/COLOR]

[COLOR=DarkGreen] '// Kaydet diyaloğu..
'// Filter syntax: İsim |filtre|[/COLOR]
strFilter = "Access dosyası (*.mdb)|*.mdb|"
strFilter = strFilter & "Excel dosyaları (*.xls)|*.xls|"
strFilter = strFilter & _
"Resim dosyaları (*.bmp,*.jpg,*.gif)|*.bmp;*.jpg;*.gif|"

With dlg
    .DialogTitle = "Dosya seçiniz..." [COLOR=DarkGreen]'// Başlık[/COLOR]
    .InitDir = "C:\" [COLOR=DarkGreen]'// Varsayılan konum[/COLOR]
    .Filter = strFilter
    .FileName = Empty [COLOR=DarkGreen]'// Değişkenin içini boşalt..[/COLOR]
    .FilterIndex = 0 [COLOR=DarkGreen]'// Yukarıdaki filtrelerin varsayılanı.(mdb dosyaları)[/COLOR]
    .ShowSave
If .Flags = 0 Then Exit Sub [COLOR=DarkGreen]'// İptal tuşuyla sonlandır[/COLOR]
End With

MsgBox "Kaydedilecek hedef: '" & dlg.FileName & "'"
End Sub
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;

Al&#305;nan hatayla ilgili tahminimi belirteyim. Kod sayfas&#305;nda;

Kod:
Option Explicit
varsa, ya kald&#305;r&#305;n ya da do&#287;rusu olarak "strfilter" i tan&#305;mlay&#305;n..

Kod:
Dim dlg As New CommonDialog
[B][COLOR="Red"]Dim strfilter As String[/COLOR][/B]
'// Filter syntax: &#304;sim |filtre|
strfilter = "Access dosyas&#305; (*.mdb)|*.mdb|"

....................
.........................
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Valla verdiği hata şu.. Ekran görüntüsünü yolluyorum. Ben bunu command21'e basınca hemen alıyorum.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
O hatan&#305;n hemen alt&#305;na;

dim strfilter as string

denememi&#351;siniz.. !??
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Denedim sevgili beab05. Printscreen ald&#305;ktan sonra denedim. Fakat yine MSComDlg'nin &#252;zerinde se&#231;ili vaziyette debugger penceresi geliyor.
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
&#350;u andaki hali &#351;&#246;yle:


Private Sub Komut21_Click()
Dim dlg As New CommonDialog
Dim strfilter As String
'// Filter syntax: &#304;sim |filtre|
strfilter = "Access dosyas&#305; (*.mdb)|*.mdb|"
strfilter = strfilter & "Excel dosyalar&#305; (*.xls)|*.xls|"
strfilter = strfilter & _
"Resim dosyalar&#305; (*.bmp,*.jpg,*.gif)|*.bmp;*.jpg;*.gif|"
strfilter = strfilter & "T&#252;m dosyalar (*.*)|*.*|"

With dlg
.DialogTitle = "Dosya se&#231;iniz..." '// Ba&#351;l&#305;k
.InitDir = "C:\" '// Varsay&#305;lan konum
.Flags = 4 '// Saltokunur se&#231;ene&#287;i disable olur
.Filter = strfilter
.FilterIndex = 4 '// Yukar&#305;daki filtrelerin varsay&#305;lan&#305;.(T&#252;m dosyalar)
.ShowOpen
If .Flags = 4 Then Exit Sub '// &#304;ptal tu&#351;uyla sonland&#305;r
End With

MsgBox "A&#231;&#305;lmas&#305; istenen dosya ad&#305; : '" & dlg.fileName & "'"
End Sub
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
;) Bilemiyorum... comdlg32.ocx i eklemi&#351;sinizdir herhalde ;) Akl&#305;ma gelenleri yaz&#305;yorum sadece..
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
&#350;u anda evdeki notebook'da denedim. Onda da ayn&#305; hatay&#305; veriyor. Yaln&#305;z notebook'de comdlg32.ocx dosyas&#305;n&#305;n olmad&#305;&#287;&#305;n&#305; farkettim. ddlfiles.com'dan indirdim. Her ikisini de -comdlg32.dll ve ocx- system klas&#246;r&#252;ne kopyalad&#305;m. ocx dosyas&#305;n&#305; regsvr32 ile a&#231;arak registere kaydettim. Sonra program&#305; tekrar &#231;al&#305;&#351;t&#305;rd&#305;m. Yine ayn&#305; sat&#305;rda hata verdi. Yapt&#305;&#287;&#305;m i&#351;lemlerde bir yanl&#305;&#351;l&#305;k m&#305; var? system32'ye de kopyalayay&#305;m m&#305; ayn&#305; dosyalar&#305;?
 
Katılım
30 Ocak 2006
Mesajlar
937
Excel Vers. ve Dili
Access 2003
Farkettim ki benim notebook'da comdlg32.dll dosyası system32 altında. Ben de tekrar ocx dosyasını system32 altına kopyhalayıp orada da register ettim. Ama sonuç değişmedi. Yine aynı yerde

dlg As New CommonDialog bölümü seçili olarak kod debug penceresi karşıma geliyor. Sizde nasıl?.. Benim örneğin son halini yükledim. Bir inceleyin derim.. Belki form üzerinde sizde de hata verecektir.
 
Üst