Sorgu Çok Karmaşık

Morgengabe
19-06-2009, 18:33   |  #1  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

Selam arkadaşlar,

Bir form, üzerinde çok sayıda alan ve bir BindingNavigator var. BindingNavigatorSaveItem butonunun altında kendi hazırladığı aşağıdaki kodlar var:

Private Sub TahakkukBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TahakkukBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.TahakkukBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DsPersonel)
    End Sub

Bu butona tıkladığımda

Me.TableAdapterManager.UpdateAll(Me.DsPersonel)

Satırını işaretliyor ve

"Sorgu Çok Karmaşık" hatasını veriyor. Çözebilir miyiz?

(VB.NET 2008 Express Edition, ADO.NET 3.5, Access mdb)

PcMaKeR
20-06-2009, 13:24   |  #2  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

Sen hazır kullanmayı çok seviyorsun.

Datasetlerle işlem yaaprken ilişkileri ve tablo yapısını dikkatli hazırlamakta yarar var.

O hatayı sen değil dataset ile DataAdaptor veriyor.

Dataseti kontrol et ilk önce.

Birde Access kullanıyorsun Access in kısıtlı olduğu işlemi yapabilir oluşturduğun binding işlemleri.

Morgengabe
20-06-2009, 20:03   |  #3  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

çok sağol PcMaker.

Oturdum çok büyük bir UPDATE sorgusu yazdım o butonun altına. Ayrıca o formdaki sil butonunu da kaldırıp bir butonun altına DELETE sorgusu yazdım.

aslında hiçbir şekilde hazır kullanmayı sevmiyorum. Ben hep kod yazarım projelerde. Ama bu okul için ve süresi çok kısıtlı,o yüzden kolayına kaçayım dedim. maalesef olmadı. Çok az kod yazarak bitirmek üzere giriştim. Büyük bir bölümü kodla çalışır halde ve bitti sayılır artık.

Örneğin BindingNavigator'daki kaydet butonlarının hepsinin problem çıkarma ihtimali var. Bu yüzden hepsine  Try-Catch bloğu yazacağım. Altlarına sıfırdan kod yazmak istemiyorum.

Kolaya kaçma sebeplerimden diğeri (ve daha önemlisi) ADO.NET'i kod yazarak nasıl halledeceğimi anlamamış olmam (kaydetme, silme, filtreleme, yeni kayıt). Örneğin BindingNavigator'da kaydet butonunun altında kısacık bir kod var. ama ben ne yaptığını anlamadığım için oturup uzun uzun UPDATE sorgusu yazıyorum. onun benzeri birşeyler yapmaya çalıştırğımda hata veriyor.


Elimde bir kitap var ve herşeyi bölüm bölüm anlatmış. arkadaş yayınlarının, çeviri bir kitap. yazar sadece her özelliğin nasıl kullanılacağını anlatıp geçmiş. Ayrıntıya girmemiş. o kitaptan hiçbirşey anlamadım.

Neyse, şimdi bana bunu nasıl exe haline getireceğim bilgisi lazım.


Bu başlık altında yazmışsın ama anlamadım maalesef. Solisyona (Proje adına) sağ tıkladığımda Add Project diye birşey gelmiyor. Ayrıca veritabanını exe'ye mi gömüyor, yoksa exe dosya ile veritabanı yan yana mı duracak? Benim veritabanı şu an debug klasöründe, sorun çıkar mı (publish yapıp başka bilgisayarda çalıştırdığımda sorun çıkmamıştı gerçi)? Şu anda Projeyi derleyerek çalıştırdığımda deneme kayıtlarımın hepsini siliyor. Bu yeniden derlemeden mi kaynaklanıyor? Publish veya exe ile kurduğumda normal çalışacak mı?

Sana çok yük oluyorum ama umarım (sorun çıkmazsa) artık projeyi teslim etmeme az kaldı. Çok çok teşekkür ederim...

(VB.NET 2008 Express Edition, ADO.NET 3.5, Access mdb)

Morgengabe
20-06-2009, 22:34   |  #4  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

birkaç soru daha:

1) Bir DataGridView'in bir sütunundaki verilerin sağa yanaşık yazılmasını istiyorum (Burada sayı var çünkü). Bir türlü beceremedim, bir yolu var mı?

2) MDI Parent forma bir menü çubuğu yerleştirmiştim. Ama Child formları açıp her tam ekran yaptığımda bu menü çubuğunun (MenuStrip) üzerine çıkıyorlar. Bunu engellemenin yolu var mı?

3) Access kullanmamın sebebi taşınabilir olmasıydı. Sonra SQL Server'ın da oldukça kolay bir şekilde taşınabildiğini öğrendim (ve kahroldum tabi). Okul için hazırladığım bu proje aynı zamanda kendi işimle de ilgili. Bu yüzden ileride bunu geliştirmeyi düşünüyorum.
    a) MDB to SQL Server yapılabiliyor mu?
    b) Access veritabanını aynı şekilde SQL Server'da hazırlayıp, projedeki dataseti silip yeniden SQL Server olarak oluşturursam kod ve formlar sıkıntısız çalışır mu?
    c) SQL Server'ın taşınmasının nasıl yapıldığıyla ilgili -Türkçe- bilgi bulabilir miyim? Kitap alabilirim, eğer bu bilgiye yer veriyorlarsa.

PcMaKeR
22-06-2009, 10:41   |  #5  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

"(VB.NET 2008 Express Edition, ADO.NET 3.5, Access mdb)"

bu sürümde Setup hazırlanamaz. Visual Studio Pro, Standart, Team Suite ve Academic sürümde hazırlanır.

Sql database kullanmak için

SqlClient Namespace i kullanılır.
OleDB yerine.

OleDbConnection yerine SqlConnection sınıfı kullanılır.

Sql Veritabanları, Access kadar basit değildir taşınabilirlikte.

Accesste JET 4.0 Provider olması yeterliyken,
SQL İçin Sql Server kurulması gerekir.
Sql 2000 sürümü için 40 MB,
Sql 2005 sürümü için 50 MB,
Sql 2008 sürümü için 85 MB lık kurulum dosyası gereklidir.
(Express Sürüm için bunlar normalde sql server 2000 2 cd, 2005 2 cd, 2008 1 dvd ile gelir.)

Ama Accessten hızlı rahat kullanımlı ilişkisel bir veritabanıdır.

.NET ile en uyumlu veritabanıdır. Özellikle sql server 2005 ile 2008 sürümleri .NET ile çok uyumlu çalışır.




burları takip et.

Yanlız yolun başındayken C# a geç.
VB.net biliyorum ama yazarken c# kadar esnek değil

bak mesela

VB için

Sub VeriIsle(ByVal ad as String, ByVal soyad as String) as String
try
return ad+soyad
carch ex as Exception
return "hata"
end try
End Sub

C# ta ise

string VeriIsle(string ad,string soyad)
{
  try
  {
      return ad+soyad;
  }
  catch(excepiton ex)
  {
      return "hata";
  }
}

bu daha kolay geliyor. Hele Event Tanımlamar , Değişken tanımlamalar değer atamalar.

sen vb de böyle değer atayabilir misin bak

string deger=@"Bu değişkene
              string bir
              değer atanmaktadır";

vb bunu yapamaz işte.

Morgengabe
22-06-2009, 18:00   |  #6  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

Anladım. desktop bilgisayarımda VS.NET 2005, laptopta VB.NET Express Edition 2008 yüklü. desktop PC'den VS.NET 2005'i kaldırıp 2008 yüklemeyi deneyeceğim. umarım sıkıntı çıkmaz.
Zaten bugün .NET Framework 3.5 yüklü bir bilgisayarda release klasöründen programı çalıştırmayı denedim. Veritabanına bir türlü kayıt eklemedi. veritabanındaki hazır bilgileri okuyabildi ama her nedense yeni kayıt eklemedi. bir de exe ile deneyeyim. veritabanındaki hazır bilgileri okuyup kayıt yapamaması tuhaf geldi ama desktop pc'mde (VS.NET 2005 + .NET Framework 3.5) yüklü bilgisayarda aynı şekilde şıkır şıkır çalışmıştı. O nedenle kurulumda birşeyler eksik olduğunu düşünüyorum (Projeyi laptopta geliştirmiştim. Desktop PC'ye ilk defa test için release klasöründen kurmuştum).

C#'a geçeceğim. ama okul beklemediği için en iyi bildiğim ve en hızlı öğrenebileceğimi kullanıyorum şimdilik. Çünkü yıllardır Excel ve Access ortamında VB kullanıyorum ve sıfırdan bir dil öğrenmeye kalkarsam hiçbirşey yetiştiremeyeceğimin farkındayım.

Bir de OOP var tabi. Bunu functionlara çok benzetiyorum ben. OOP'de sınıflarda özellik (eski anlamıyla değişken) tanımlayıp methodları kullanılıyor. functionlarda daha basit biçimde değişken tanımlanıyor, ve function'un kendisi method olarak kullanılıyor. Bu söylediklerimi ikisini aynı kefeye koymak olarak algılama. OOP'nin çok daha fazla faydasının olduğunun farkındayım ama Yapısal programlamadan OOP'ye geçişte zorlanıyor insan. Okul bitince OOP'yi iyice öğreneceğim.

Verdiğin bilgiler ve ilgin için çok teşekkür ederim. Şİmdi exe hazırlama meselesini halledip, şu projeyi teslim edip kafamdan atmak istiyorum artık. exe işini kendim deneyeceğim (umarım bir yerlerde VS.NET 2008 vardır bende) ama olmazsa projeyi sana gönderip exe yapmanı rica edebilir miyim?

Saygılarımla...

PcMaKeR
22-06-2009, 18:54   |  #7  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

JET DB kurulu değildir o yüzden öyle olmuştur exe.

OOP öyle düşündüğün gibi değil.

kavrarsan function falan ne dersin.

Proje geliştirirken express kullanma hiçbir zaman.

deneme sürüm olan vs ideleri kullan.

Morgengabe
22-06-2009, 19:44   |  #8  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004
PcMaKeR
Proje geliştirirken express kullanma hiçbir zaman.
Bir daha bu hatayı yapmayacağıma emin olabilirsin.


Bu adreste VS.NET 2005 ile setup dosyası oluşturmayı çok güzel anlatmış. Herhalde VS.NET 2008'de de hemen hemen aynıdır.

Uygulamanın kullandığı dosyalar derken sadece release klasörünün içindekilerden mi bahsediyor?

JET DB ayrıca kurulabiliyor mu? Nasıl?

OOP'yi kavrama konusu beni korkutuyor doğrusu, ya öğrenemezsem diye. Bunu bana kavratacak kadar iyi bir kitap bulabilirim umarım...

PcMaKeR
23-06-2009, 08:57   |  #9  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

VB.NET zaten oop bir dildir.
VB 6.0 ın köklü değişmiş halidir.

setup oluşturma 2008 de de aynı ;)

JET DB sp8 normalde windows xp sp2 ile geliyor.

windows 2003, vista ve üstünde gerekli olmuyor.

ama yinede kurmak için microsoftun sitesinden aratabilirsin ;)

oop gözünü korkutmasın. Tadını aldın mı fonksiyonel programlama ne ki diyeceksin.

modul ler falan fıs gelecek.

sınıflar(classlar) ın tadını aldıkça keşke ilk önce bunu öğrenseydim diyeceksin.

başla biryandan.

senin o kullandığın OleDbAdaptor, OleDbConnection ,Dataset, Datatable bunlar hep classtır unutma.

alıştıkça kendi classlarını yazacaksın performanslı projelerin yükselecek. herşeyi sık eleyip ince dokuyacaksın (doğru mu kullandım  :D).

Morgengabe
23-06-2009, 16:17   |  #10  
OP Üye
Teşekkür Sayısı: 0
76 mesaj
Kayıt Tarihi:Kayıt: Mar 2004

Tamamdır, hallettim. İnnosetup diye bir programla setup oluşturdum (VS.NET 2008'i de indirdim ama bu arada). Release klasörünün içine output diye bir klasör oluşturup bunun içine oluşturdu setup dosyasını. sonra release klasörünü alıp başka bir bilgisayara olduğu gibi kopyaladım ve bu setup programını çalıştırdım. kurulumu yaptı, veritabanını da program files/proje_adı klasörüne kendisi attı. projemi masaüstü ikonundan çalıştırdım ve sorunsuz kullandım.

Şimdi birkaç bilgisayarda test edip teslim etmek kaldı.

Yukarıda bahsettiğim veritabanına kaydetme problemi de benden kaynaklanıyordu büyük ihtimalle. Galiba yeni kayıt butonuna tıklamadan veri girmeye çalışıyordum :)

İlgin için, yardımların için, emeğin için çok çok teşekkür ederim.

Saygılarımla...

PcMaKeR
23-06-2009, 17:03   |  #11  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

Saygılarımla ;)

Sorun çözülsünde emeği boşver ;)