AccessTr.neT

Tam Versiyon: Sorgunun tabloya başvurmadan istenilen sayıda satır üretmesi münkün mü?
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Merhaba,
Bir sorgunun, herhangi bir tabloya başvurmadan istenilen sayıda satır üretmesinin mümkün olup olmadığını öğrenmek istiyorum.

Biraz daha açık anlatmaya çalışayım:

Konsol programlarında, diyelim ki for döngüsüyle ekrana yukarıdan aşağıya doğru 1'den 10'a kadar ardışık sayı yazdırabiliriz.

İşte bunu Sql sorgusuyla yapabilir miyim?

Sorgunun diğer sütunları da herhangi bir tabloya başvurmayacak çünkü. Bu ilk sütundaki değerleri alıp sonuç üretecek functionlardan oluşacak diğer sütunlar.

Örnek eklemiyorum. Çünkü bunun örneği yok. Yalnızca, benim yapacağım sorguda 0'dan başlayıp yine bir functionla hesaplayacağım sayıya kadar ilerleyecek (o sayı kadar satır üretecek ve bunları her satıra, ilk sütun değeri olarak yazacak). Yani bitiş değeri de göreceli olacak.

Böyle birşey yapılabildiğinden pek umudum yok ama, belki farklı tekniklerle bu işi yapabilen üstadlarımız vardır.

Saygılarımla...
Merhaba arkadaşlar,
Yukarıdaki sorumun çözümünü buldum.

Problemin çözümünde epey bir süre önce forumdan indirdiğim bir uygulamadaki yöntemi kullandım. Bu uygulama kredi ödeme planı oluşturuyordu. O uygulamayı foruma kimin yüklediğini hatırlamıyorum, yalnızca yükleyen arkadaşın yabancı sitelerden bulduğu bir uygulama olduğunu hatırlıyorum.

Çözümü ekteki örneğim üzerinden anlatayım.

Sorumun başlığında "tabloya başvurmadan" diye belirtmiştim ama tabii ki -SQL'in temelleri gereği- bir tablo ve esas sorgumuzun başvuracağı bir sorgu hazırlayarak çözdüm. Ekteki örneğimde Rakamlar isimli bir tablo oluşturdum ve içeriğine 0'dan 9'a kadar rakamları girdim. Sonra SrgSayilar isimli bir sorgu hazırladım. Bu sorgu Rakamlar tablosuna başvuruyor ve 999'a kadar sayı üretiyordu. Sql cümlesi şöyledir:

SELECT (Rakamlar.Rakam+(Rakamlar1.Rakam*10)+(Rakamlar2.Rakam*100)) AS Sayilar
FROM Rakamlar, Rakamlar AS Rakamlar1, Rakamlar AS Rakamlar2
ORDER BY (Rakamlar.Rakam+(Rakamlar1.Rakam*10)+(Rakamlar2.Rakam*100));

Bu sorgudaki SELECT kısmını şöyle yazarak, örneğin 99'a kadar sayı üretmek mümkün:

SELECT (Rakamlar.Rakam+(Rakamlar1.Rakam*10)) AS Sayilar

Yukarıdaki sorumda ilk sütundaki değerlerin üst sınırının oluşturduğum bir functiondan dönecek değer olacağını söylemiştim. Sorgunun diğer sütunlarınında functionlardan oluşacağını, bu functionların, ilk sütundaki değerleri alarak bunlar üzerinde işlem yapacağını söylemiştim.

Buna göre Vba kısmına basit functionlar (4 adet) oluşturdum. Bu functionları tamamen örnek oluşturmak için yazdım. Gerçek uygulamamda kullandıklarım biraz daha karmaşıktır. İlk function sınır değeri belirliyor. Diğerleri de kendilerine gönderilen değerleri basit çarpma işlemi yaparak sonuç döndürüyorlar. SrgEsasSorgu adını verdiğim sorgunun Sql cümlesi şöyle:

SELECT SrgSayilar.Sayilar, SayiCarp(SrgSayilar.Sayilar), SayiCarp1(SrgSayilar.Sayilar), SayiCarp2(SrgSayilar.Sayilar)
FROM SrgSayilar
WHERE SrgSayilar.Sayilar BETWEEN 0 AND SinirDeger()
ORDER BY SrgSayilar.Sayilar;

İşte böyle. Forumda dursun ki ihtiyacı olanlar kullanabilsin.
Saygılarımla...

[attachment=16659]
sayın WiniFired
paylaşım için teşekkürler