CheckListBox da For yada while döngüsü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

CheckListBox da For yada while döngüsü

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

var
i:integer;
begin
for i:=0 to JvCheckListBox1.Items.count-1 do
    if JvCheckListBox1.Checked[i]=true Then
        Begin
 Form1.IBQuery7.SQL.Clear;
Form1.IBQuery7.SQL.Add('select * from TBL_OGRENCI where TEL_NO='+#39+JvCheckListBox1.Items.Strings[i]+#39+'' );
Form1.IBQuery7.open;

 Form1.QRY_SMS.Append ;
Form1.QRY_SMS.Edit;
Form1.QRY_SMS.FieldByName('MESAJ').AsString:=Memo2.Text;
 Form1.QRY_SMS.Post;

    end;
    end;
JvCheckListBox daki kayıt sayısı kadar JvCheckListBox1.Checked[0] dan.....JvCheckListBox1.Checked[.....] kadar döndürüp true olanları Query sorgusu ile master tabloda aratıp bulunan sonuca göre detay tabloma veri girmek istiyorum.Fakat bu işlemde örneğin CheckListBox 3 kayıt varsa master tablodaki Son kaydın detayına 3 tane aynı veriyi giriyor diğer deytayları görmüyor.Anlamadım gitti.CheckListBox daki son veriyi sorguluyor.Diğerlerini görmüyor

Her dönüşte sorguya uyanlara veri girmesini nasıl sağlarım arkadaşlar.For yada while döngü örneği verebilecek olan varmı.Teşekkürler
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: CheckListBox da For yada while döngüsü

Mesaj gönderen Battosai »

S.A haydar yöntemin yine yanlış eğer listbox içinde 100 tane kayıt olsa ne olacak gereksiz yere dataset açılacak sorgulanacak ,veritabanı fazla yük binecek...bunun yerine buraya ne yapmak istediğini yazarsan daha iyi bir yöntem tavsiyesi verilebilir....mesela burda sorguyu
var
i:integer;
telno:widestring;
begin
telno:='';
for i:=0 to JvCheckListBox1.Items.count-1 do
begin
if JvCheckListBox1.Checked=true Then
begin
telno:=telno+','+vCheckListBox1.Items.Strings;
end;
end;
if trim(telno<>'') then
begin
delete(telno,1,1);//baştaki virgülü siliyoruz...
Form1.QRY_SMS.SQL.clear;
Form1.QRY_SMS.close;
Form1.QRY_SMS.Text:='update TBL_OGRENCI set MESAJ= '+#39+Memo2Text+#39+' where TEL_NO in ('+#39+Memo2Text+#39+')' // burda "in" kullanımını firebird e göre ayarla...
Form1.QRY_SMS.ExecSQL;
end;


Bu kodda yazım hataları olabilri sen düzeltirsin...böyle yapınca ne oldu...10 sorgu yerine tek sorgu ile işini halletmiş hem veritabanını hemde kendi program hızını artırmış olduk luzumsuz işlemden kurtarmış olduk...aklında bulunsun veritabanına döngü ile çoklu sorgu göndermek çok kötü bir yöntemdir her zaman daha iyi bir altarnetif vardır...işlemleri bırak veritabanı yapsın...sorgularınu buna göre ayarlarsan verimi artırmış olursun....
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: CheckListBox da For yada while döngüsü

Mesaj gönderen haydarxxx »

Hocam ilginiz için teşekkür ediyorum.
bunun yerine buraya ne yapmak istediğini yazarsan daha iyi bir yöntem tavsiyesi verilebilir
Sms atacağım kişilerin telefon numaralarını JvCheckListBox da tutuyorum ve burada true durumunda olanlara atacağım mesajı Veritabanımda de kayıtlı olan kişilerin (master tablom) TEL_NO alanlarını sorgulatarak o kişinin detay tablosundaki MESAJ bölümüne kaydetmek isitiyorum(tabi mesaj gitmiş ise).Böylece kimlere hangi sms atıldığını hangi tarihte atıldığı gibi bir kayıt tutayım istiyorum.

Sonunda sms atma işini becerebilidim sayenizde ayrıca teşekkür ediyorum .numaralar arsına virgül koymadan).Fakat giden her sms i hangi telefon numarasına atılmış ise vt den sorgulatıp mesajı kaydetmek istiyorum.Ama beceremedim :?

master tablom TBL_OGRENCI alanlarından biri TEL_NO
detey tablom TBL_SMS ise MESAJ-ID-TARIH
IBQuery7 TBL_OGRENCI ye bağlı

sms atma kodunu yazıyorum ve bu kodların arasına bu isteğimi sıkıştırmak istiyorum.Kodlarınızı dendim ama yapamdım :oops:

Kod: Tümünü seç

var
i:integer;
Number:string;
begin
if JvDotNetMemo1.Text='' then
begin
MessageBox(Handle,'Mesajınız Boş.  ','Bilgi',MB_OK+MB_ICONINFORMATION);
exit;
end;
if Label6.Caption='0' then
begin
MessageBox(Handle,'Numara listesinde mesajın gönderileceği en az 1 numara işaretli olmalıdır.','Bilgi',MB_OK+MB_ICONINFORMATION);
exit;
end;
for i:=0 to JvCheckListBox1.Items.Count-1 do
begin

 Number:=JvCheckListBox1.Items.Strings[i];
if  JvCheckListBox1.Checked[i]=True then
begin
try


 JvCheckListBox1.Checked[i]:=false;  //ileti gönderileni kaldır
//  gönderim
StrHTTP:='username='+edit1.Text+'&company='+edit3.text+'&password='+edit2.text+'&action=0&message='+JvDotNetMemo1.Text+'&numbers='+Number;
Memo1.Text:=HTTPSend(StrHTTP);
  //  gönderim

  ListBox2.Items.add(Number);
  try
   IdAntiFreeze1.Active:=True;

  ListBox1.Clear;//Listbox1 benim gönderim durumu ve hata bilgisini gösterdiğim listem...
  ListBox1.Items.Add('İşlem Raporu:');
  ListBox1.Items.Add('->'+DateToStr(date)+'-'+copy(TimeToStr(time),1,5));
  ListBox1.Items.Add('->Mesaj Gönderiliyor...');
  if Memo1.Text='01' then // hata kodları firmanın verdiği bilgilerden alınmıştır pdf dosyası...
    begin
    ListBox1.Items.Add('->Mesaj İletilemedi !');
    ListBox1.Items.Add('->Açıklama:Hatalı kullanıcı adı – şifre – bayi kodu');
    end;
  if Memo1.Text='02' then
   begin
    ListBox1.Items.Add('->Mesaj İletilemedi !');
    ListBox1.Items.Add('->Açıklama:Yetersiz kredi,Paket işlenmemiş ya da Gateway tarafında beklemede');
   end;
    if Memo1.Text='04' then
   begin
    ListBox1.Items.Add('->Mesaj İletilemedi !');
    ListBox1.Items.Add('->Açıklama:Eksik parametre girişi');
   end;
     if Memo1.Text='05' then
   begin
    ListBox1.Items.Add('->Mesaj İletilemedi !');
    ListBox1.Items.Add('->Açıklama:Hatalı parametre girişi');
   end;
      if Memo1.Text='06' then
   begin
    ListBox1.Items.Add('->Mesaj İletilemedi !');
    ListBox1.Items.Add('->Açıklama:Tanımsız Originator Bilgisi');
   end;

   if (AnsiCompareText('3152005',Memo1.Text)<0)or (AnsiCompareText('3152005',Memo1.Text)=0) then
   begin
    ListBox1.Items.Add('->Mesajınız İletilmiştir.');


[u]//buraya yazılacak kodlar veya başka satıra
form1.IBQuery7.close;
form1.IBQuery7.SQL.clear;
form1.IBQuery7.SQL.Text:='update TBL_OGRENCI set MESAJ='+#39+JvDotNetMemo1.Text+#39+' where TEL_NO='+#39+JvCheckListBox1.Items.Strings[i]+#39+'';
form1.IBQuery7.ExecSQL;
//buraya yazılacak kodlar veya başka satıra[/u]
   end;

  finally

    IdAntiFreeze1.Active:=False;
  end;
  except
  on E:Exception do
        begin
       MessageBox(handle,'Servis sağlayıcıya bağlanılamadı.'+#10#13+'İnternet bağlantınızı kontrol ediniz.'+#10#13+'Antivirüs programı kullanıyorsanız programın internete erişimine izin verin.','Hata',mb_ok+MB_ICONERROR);
        end;
   end;
   end;
  end;
end;
//buraya yazılacak kodlar veya başka satıra
form1.IBQuery7.close;
form1.IBQuery7.SQL.clear;
form1.IBQuery7.SQL.Text:='update TBL_OGRENCI set MESAJ='+#39+JvDotNetMemo1.Text+#39+' where TEL_NO='+#39+JvCheckListBox1.Items.Strings+#39+'';
form1.IBQuery7.ExecSQL;
//buraya yazılacak kodlar veya başka satıra

bunu düzenleyemedim. :oops: :cry: vermiş olduğun kodu denedim uyarlama çalıştım ama nafile.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: CheckListBox da For yada while döngüsü

Mesaj gönderen Battosai »

Bu tarz raporları zaten sms servisi veriyor sana bunları veritabanında tıtman gerekmiyor...sadece kim ne zaman atmış kayıt edebilirsin...sms gönderme işinin raporlama meselesine bir bak sadece action=2 yapıyorsun bide bilgileri giriyorsun gönderiyorsun sonra sistem sana raporu yolluyor....şu sms servisini pdf dosyasını bi incele...eğer ben gönderilen mesajıda kayıt edicem diyorsan benim kod işe yaramaz zira update işlemi yapıyor sana lazım olan insert olur bu durumda...
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: CheckListBox da For yada while döngüsü

Mesaj gönderen haydarxxx »

ptf dosyasını okudum orada hiç bir şey yok ki.Verdikleri raporlama kodu

Kod: Tümünü seç

//rapor
   StrHTTP:='username='+JvDotNetEdit1.Text+'&company='+JvDotNetEdit3.text+'&password='+JvDotNetEdit2.text+'&action=1&msgid=1492993';
  Memo1.Text:=HTTPSend(StrHTTP);
  Memo1.Text:=StringReplace(Memo1.Text,VK_LF,VK_CRLF,[rfReplaceAll]);
  //rapor
sms gönderildiğinde ister tek ister toplu mobildev sms bir tane ID veriyor.Dolayısı ile bu ID den numarasına göre rapor veriyor.

Kod: Tümünü seç

msgid
buradaki değişken msgid yi ben nereden alacağım.Bu Id leri vt de tutmak gerekmez mi.yukardaki kod a göre alınan raporda memo da verilen rapor şu şekilde geliyor.
1492993 0090505476xxx 1
1 iletildiğini gösteriyor.Bazı Sms programları giden ID den gönderilen mesajların tarihine kadar bir rapor kaydı tutuyor vt sinde.Bende böyle bir şey yapmak istiyorum.Yani kullanıcı hangi müşteriye hangi tarihte ne tür bir sms atılmış.içeriği neymiş gibi.Yani giden sms leri kayıt altına almak istiyorum.Fakat yine söyleyeyim pdf dosya içeriğinde açıklayıcı hiç bir şey yok.sadece yukardaki kod var.
Cevapla