DBEDİT ve Tamamlama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DBEDİT ve Tamamlama
S.A
Kayıt yaptığım table'da birbirini tekrarlayan kayıtlar var ve yeni kayıtlar yaptıkcada format gereği tekrarlayacak ama her seferinde dbedite yeniden yazılması gerekiyor. DBedite yazarken bir algılama kolaylığı olabilirmi yani llk kemeyi görünce editin içine (önceden girilmiş ise) getirsin istiyorum. Teşekkür ederim.
Kayıt yaptığım table'da birbirini tekrarlayan kayıtlar var ve yeni kayıtlar yaptıkcada format gereği tekrarlayacak ama her seferinde dbedite yeniden yazılması gerekiyor. DBedite yazarken bir algılama kolaylığı olabilirmi yani llk kemeyi görünce editin içine (önceden girilmiş ise) getirsin istiyorum. Teşekkür ederim.
A.S.
yapman gereken OnNewRecord olayında kodla atama yapmak. Mesela şehir için daha çok istanbul seçiliyorsa :
Dataset.FieldByName('SEHIR_KODU').AsInteger := 34;
gibi atamayı yaparsın. Kullanıcı isterse değiştirir.
Bu şekilde istersen değişik hesaplamlar vs. yaparakta ilk değer atayabilirsin.
Kolay gelsin.
yapman gereken OnNewRecord olayında kodla atama yapmak. Mesela şehir için daha çok istanbul seçiliyorsa :
Dataset.FieldByName('SEHIR_KODU').AsInteger := 34;
gibi atamayı yaparsın. Kullanıcı isterse değiştirir.
Bu şekilde istersen değişik hesaplamlar vs. yaparakta ilk değer atayabilirsin.
Kolay gelsin.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
bu kod işine yarar sanıyorum.
vatandaş edit1 e bişeler yazıp arattığı zaman otomatik olarak daha önceden aratmış olduğu şeyleri edit otomatik olarak tamamlıyor.
program her başladığında en son kelimleri hatırlaması için bi dosyaya kaydedebilir program açılırken bu dosyadan yükleme yapabilirsin.
vatandaş edit1 e bişeler yazıp arattığı zaman otomatik olarak daha önceden aratmış olduğu şeyleri edit otomatik olarak tamamlıyor.
program her başladığında en son kelimleri hatırlaması için bi dosyaya kaydedebilir program açılırken bu dosyadan yükleme yapabilirsin.
Kod: Tümünü seç
procedure TfrmMain.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
theText: string;
i, p: integer;
begin
// if not ckbxList.checked then exit; //istersen tamamlamayı isteğe bağlı yapabilirsin
with Edit1 do
case key of
8, 13, 46, 37..40,112..123: ; // bakspace, enter ,f1 ler falan filan
else
begin
p := selStart;
theText := copy(text, 0, p);
for i := 0 to listValues.count-1 do
begin
if pos(upperCase(theText), upperCase(listValues[i]))=1 then
if compareText(theText, listValues[i]) < 0 then
begin
text := listValues[i];
selStart := p;
SelLength := length(text) - selStart;
break; // Match found, so quit search
end;
end; // for
end; // case
end; // with
end;
Kod: Tümünü seç
procedure TfrmMain.FormCreate(Sender: TObject);
begin
listValues := TStringList.create;
listValues.sorted := true;
listValues.Duplicates := dupIgnore;
listValues.LoadFromFile(dosya adı);
//daha önceden bi dosyaya kaydettiğin listeyi buraya yükleyebilirsin
end;
Kod: Tümünü seç
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
//elemanları daha sonradan kullanmak için bi dosyaya burada kaydedebilirsin.
listValues.SaveToFile(DosyaAdi);
FreeAndNil(listValues);
end;
Kod: Tümünü seç
public
.........
listValues : TStringList;
............
Kod: Tümünü seç
procedure TfrmMain.ButonAraClick(Sender: TObject);
begin
listValues.add(Edit1.text);
//kullanıcının yeni yazdığı kelimeyi listeye ekle
end;
-
- Üye
- Mesajlar: 10
- Kayıt: 25 Ağu 2004 01:49
- Konum: Bursa
- İletişim:
dbcombobox sadece itemsinde olan verileri dataya yazar olnalari getirmez bunun için dblookupcombox kullanmak gerekir..aslangeri yazdı:DBcombobox otomatik olarak önceden girilen kayıtları göstermesi lazım.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Kod: Tümünü seç
PROCEDURE TMusteriKartiF.dbEdit1Change(Sender: TObject);
VAR
btus: boolean;
metin, bulunan: STRING;
secim: integer;
BEGIN
IF btus = True THEN
BEGIN
btus := false;
exit;
END;
//bu kısmı kaldır ki bulunan değer geri donmesin
// IB_CH.Locate('AD', dbedit1.Text, [loPartialkey, loCaseinsensitive]);
metin := dbedit1.Text;
bulunan := Q_MusteriKartiFirmaAd.Value;
IF secim > 0 THEN
BEGIN
dbedit1.Text := bulunan;
dbedit1.SelStart := length(metin);
dbedit1.SelLength := secim;
END;
END;
sana sadece kendine gore uyarlamak kalıyor...
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Bana böyle birşey lazım.ALUCARD kardeş sadece kodda şu kısmı anlamadım.
Burada Q_MusteriKartiFirmaAd.Value değeri nerden geliyor.Bana bu konuda yardımcı olursan sevinirim.Sizin yazdığınız kodda tuşa basıldıkça locate ile arama yaptırıp değeri alım işlemini yapıyorsunuz.
Yani adotable1.fieldbyname(ad).value; gibi..
Name'ini değiştirdiniz tam anlamadım.Bana dbedit'e veri girdikçe database'den veriyi çekip tamamlama işini yapmam konusunda yardımcı olursanız çok memmun olurum..
Kod: Tümünü seç
bulunan := Q_MusteriKartiFirmaAd.Value;
Yani adotable1.fieldbyname(ad).value; gibi..
Name'ini değiştirdiniz tam anlamadım.Bana dbedit'e veri girdikçe database'den veriyi çekip tamamlama işini yapmam konusunda yardımcı olursanız çok memmun olurum..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
adoquery ile hallettim..
Kod: Tümünü seç
procedure TForm3.proformanoChange(Sender: TObject);
VAR
btus: boolean;
metin, bulunan: STRING;
secim: integer;
BEGIN
IF btus = True THEN
BEGIN
btus := false;
exit;
END;
adoquery1.SQL.Clear;
adoquery1.Close;
adoquery1.SQL.Add('select proformano from data where proformano LIKE'+QuotedStr(proformano.Text+'%')+'order by no');
adoquery1.Open;
metin := proformano.Text;
bulunan:=dbgrid1.DataSource.DataSet.FieldByName('proformano').AsString;
IF (secim > 0) and (adoquery1.RecordCount<>0) THEN
BEGIN
proformano.Text := bulunan;
proformano.SelStart := length(metin);
proformano.SelLength := secim;
END;
END;
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
@sadettinpolat'ın kodunda minik bir revizyon ile bir liste dosyasından değil veritabanından kontrol özelliği sağlanabilir.
@AliRiza; sen de sorunu bir oluşturduğun SQL'i takibe alacak bir DBLookUpComboBox ile çözebilirsin.
- Formuna bir DBLookUpComboBox koy. adoquery1'in datasource'u neyse bilmiyorum ama örnekte DataSource1 olsun
Not: İşlemler çok hızlı gelişeceğinden AdoQuery yavaş kalabilir. Nefes alması adına Open satırından sonra
eklemeyi ihmal etme...
- İşte bu kadar... başarılar...
Kod: Tümünü seç
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
theText : string;
p : integer;
begin
With TEdit(Sender) do
case key of
8, 46, 37..40, 112..123: ; // backspace, f keys
13: SelStart := Length(Text);
else
begin
P := SelStart;
TheText := copy(Text, 0, p);
If AdoTable1.Locate('M_Name', theText, [loPartialKey]) then
begin // veritabanında pozisyon aldığında...
Text := AdoTable1.FieldByName('M_Name').AsString;
SelStart := p;
SelLength := Length(Text) - SelStart;
end; // If
end; // else
end; // Case
end;

- Formuna bir DBLookUpComboBox koy. adoquery1'in datasource'u neyse bilmiyorum ama örnekte DataSource1 olsun
Kod: Tümünü seç
DBLookUpComboBox1.ListSource := DataSource1;
DBLookUpComboBox1.KeyField := 'proformano';
Kod: Tümünü seç
Application.ProcessMessages;

- İşte bu kadar... başarılar...
pardon ya yanlış yazmışımAliRiza yazdı:Bana böyle birşey lazım.ALUCARD kardeş sadece kodda şu kısmı anlamadım...Kod: Tümünü seç
bulunan := Q_MusteriKartiFirmaAd.Value;
Kod: Tümünü seç
bulunan := IB_CHFirmaAd.Value;
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Arkadaşlar @Alucard'ın yazdığı kod sadece girilmiş verileri tamamlamaya yarar. Yeni veri giremezsiniz. Yani tamamlayarak arama yapmak için kullanılabilecek bir kod. Şimdi benim size önerim ben bunu kullanıyorum Form create edilirken ilgili alandaki benzersiz kayıtları SQL ile süzerek combonun itemsine atamak. Style de single olarak ayarlandımı iş bitti. Görünümü edit gibi ama gerçekte combobox. Bende sorunsuz çalışıyor. Denemenizi öneririm. Kolay gelsin.
Cevap
Arkadaşım ase.Ben denedim alucard'ın yazdığı kodda yeni veri girebilirsin.Ben kendim locate ile sql kullanarak denedim.İstediğim oldu.İstersen bir kontrol et..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ