query parameters

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

query parameters

Mesaj gönderen ozsal »

s.a kolaygelsin arkadaslar.
aynı soruyu bir de burada yazmak istedim beki benım sorunum progarmlama ilgilidir diye. anlayısınız için teşekkürler.

forumda arattım ama tatmın edıcı cevaplar bulamadım. şimdiden yardımlarınıziçin teşekkürler.


1. si delphi 7 ye terfii ettim. iki kitaptan destek alarak bir proje yapmaya çalışıyorum.
sorularımdan birincisi


proje de ilk olarak bir data module oluşturuyorum.
burada gereken queryleri oluşturuyorum

datamoduleun ismi dm

form üzeinde bir dbgrid bir edit box var.
istediğim edit box da tuşa bastıgım zaman (edit1.keypreess) olayında

query nin edit box daki bilgileri içeren ( al yazınca; almak,kalmak ) gibi kayıtları göstermesini istiyorum, ( ilk etap da al ile başlayanlar da olur)
ama yapamadım

daha onceden delphi 6 kullanırken

Kod: Tümünü seç

 var
ara :string;
begin
ara:='%'+edit1.text+'%';
query1.sql.close;
query1.sql.clear;
query1.sql('select * from veritabanı where  ısım=:prisim');
query1.param[0].asstring:=ara;
query1.open;

( kodu yanlış yazmış olabilirm);

gibi bir komutla yapmak istediğim ikinci şey
( al ile başlayanları listeleyebiliyordum.)

şimdi ise

formda

dm.qrsahıslar.close
dm.qrsahıslar.clear;
dm.qrsahıslar.sql.add......
qm.qrsahıslar.param[0]...


yazıp calışttırdığım zaman 'param' diye bir tanım bilmediği uyarısı geliyor.

aynı veritabanındaki verilerin örneğin aynı tarihlilerini göstermek istediğim zaman

qr.sahıslar.paramaters.parambyname('dfs').value=date;
yazarak istediğim sonuca erişiyorum.

bu arama süzme konusunda yardımlarınız için teşekkür ederim.
iyi çalışmalar
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

dm.qrsahislar.param[0] yerine
dm.qrsahislar.ParamByName('ParametreAdi').AsString := deneyebilir misiniz?

Kolay gelsin.
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

ulu coder yazdı:dm.qrsahislar.param[0] yerine
dm.qrsahislar.ParamByName('ParametreAdi').AsString := deneyebilir misiniz?

Kolay gelsin.
evet denedim
bu sefer de assting tip değerini kabul etmiyor.
value atayabiliyorum.
bu sefer de boş bir lite atıyor onume. :(
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Bi de şuna bakıverin;

Kod: Tümünü seç

dm.qrsahislar.Params.ParamValues['ParamAdi'] :=
Ama sorun sanki başka yerde :roll:
Kullandığınız kodları gönderebilir misiniz?
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

Kod: Tümünü seç

unit KISI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB,MAINAL;

type
  TFKISILER = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FKISILER: TFKISILER;

implementation

uses DATAMODULE;

{$R *.dfm}

procedure TFKISILER.Button1Click(Sender: TObject);
begin
ISIMNO:=DM.QRSAHISLAR.FieldValues['INO'];
FKISILER.CLOSE;

end;

procedure TFKISILER.FormClose(Sender: TObject; var Action: TCloseAction);
begin
EDIT1.SetFocus;
end;

procedure TFKISILER.DBGrid1DblClick(Sender: TObject);
begin
ISIMNO:=DM.QRSAHISLAR.FieldValues['INO'];
FKISILER.Close;

end;

procedure TFKISILER.Button2Click(Sender: TObject);
begin
WINEXEC('C:\OZ-SAL\HESAP\KISILER\KISIKAYDET.EXE',SW_SHOW);
end;

procedure TFKISILER.Edit1Change(Sender: TObject);
VAR
ST:STRING;
begin

ST:='SELECT * FROM SAHISLAR WHERE ISIM='+ ' %'+ EDIT1.Text;
DM.QRSAHISLAR.CloSE;
DM.QRSAHISLAR.SQL.Clear;
DM.QRSAHISLAR.SQL.Add(ST);
//DM.QRSAHISLAR.Parameters.ParamByName('GYS').Value:=ST;
DM.QRSAHISLAR.Open;


end;

end.
programın kodu aynen boyle en son ki edit change olayı keypress olayında kayıtlı idi fakat bir türlü istediğim olayı gerçekleştiremedim.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Kod: Tümünü seç

ST:='SELECT * FROM SAHISLAR WHERE ISIM LIKE %:Matrax%';
DM.QRSAHISLAR.Close;
DM.QRSAHISLAR.SQL.Clear;
DM.QRSAHISLAR.SQL.Add(ST);
DM.QRSAHISLAR.ParamByName('Matrax').AsString := Edit1.Text;
DM.QRSAHISLAR.Open;
yani '=' değil 'like'
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Dikkatimi ceken birşey oldu..

procedure TFKISILER.Button2Click(Sender: TObject);
begin
WINEXEC('C:\OZ-SAL\HESAP\KISILER\KISIKAYDET.EXE',SW_SHOW);
end;


Bunu ne icin kullaniyorsunuz merak ettim eger soylemekte bir sakinca yoksa tabi..?
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

ara:='%'+edit1.text+'%' hata burda

sql içinde like '%dene%' şeklindedir.
sizin ara değişkeniniz
like %dene% şeklinde geçer ve anlamsız olur

tırnak işaretlerine dikkat edin
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

Glen yazdı:Dikkatimi ceken birşey oldu..

procedure TFKISILER.Button2Click(Sender: TObject);
begin
WINEXEC('C:\OZ-SAL\HESAP\KISILER\KISIKAYDET.EXE',SW_SHOW);
end;


Bunu ne icin kullaniyorsunuz merak ettim eger soylemekte bir sakinca yoksa tabi..?

projeyi parça parça exeler halinde yaptım. programda aynı veritabanına değişik bolumlerde kayıt yapma ihtiyacı hissediyodum. bunu boyle bi exe yapıp istediğim zaman cagırıyorum.


belki daha kolayı vardır ama ben bilmiyorum :lol:
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

evet işte olay bu!! hepinize çok teşekkür ederim arkadaslar...
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Hmm konunun cevabi bulundu ama ben yine de şu exe meselesine takildim.. Peki kisi kaydet exesine parametre nasil gonderiyorsunuz yani atiyorum bir kisi kaydederken..

Kisi ID (hadi identity field ile cozuldu otomatik artmayla)
Kisi Kodu
Kisi Adi

diye alanlar olsa

Bu parametreler exeye gonderilebiliniyor mu? Sanirim pek kafama yatmadi bu yontem yani exeye parametre gondermek olsa bile.. Tabi eger genel bir kayit varsa yani bir sürü formdan ayni tabloya kayit yapiliyorsa genel bir procedure veya function tanimlamak daha uygun bir yontem degil mi?.. Sanirim ben yaptiginiz olayi yanlis anladim cunku pek saglikli goremiyorum kisi kaydederken harici bir exe kullanmayi..

Kolay gelsin
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

Glen yazdı:Tabi eger genel bir kayit varsa yani bir sürü formdan ayni tabloya kayit yapiliyorsa genel bir procedure veya function tanimlamak daha uygun bir yontem degil mi?.. Sanirim ben yaptiginiz olayi yanlis anladim cunku pek saglikli goremiyorum kisi kaydederken harici bir exe kullanmayi..

Kolay gelsin

evet sen yalışş anlamadın. proje içinde fonksiyonlarla kullanmak daha mantıklı.
ama ben daha once admınlere soylemiştim ismimin yanına acemı yazsınlar diye :);

niye exe yaptıgıma geleyım.

ilk olarak bi programda kullandım bunu. sonra ikinci programda da kullanmam gerektı. kayıt dosyası aynı kayıtlar aynı. ben de boş yere programa eklemeyeyım diye düşünmüştüm. iki programdan da çıkardım .
exe ye cevirdim. lazım olunca cagırıyorum. tabi bana da kötü programlama geliyor ama şu ara şu query parameters sorununu aşamadığım için onu düzenleyemedim
..
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

Bu arada arkadaslar yanlış bilgilenmesin. daha once sorun cozuldu zannetmiştim. ama hayır problem hala cozulmedı.
bir yerle hata veriyor.

belki şunu da belirtmem de fayda vardır. adoquery ve sql server kullanıyorum.


daha onceden bde ile bir programda istediğim olayı sorunsuz olarak yapmıştım.

bu sefer sorun çıkarıyor.

mesela NŞA da;

query1.param[0].astring:=.....

gibi bir tanımlamanın hata vermediğini biliyorum. çünkü kullandıgım bütün kitaplar ve kaynaklar böyle bir şey kullanmış ( ki ben de önceki programda kullanım):

ama bu sefer 'param' diye bir şey tanımadıgını söylüyor..

querye parameterre atamak için şöyle yapıyorum

datamodule1.adoquery1.parameters.parambyname('df').VALUE:=...

atstring, asinteger vs gibi deger tanımı da yapamıyorum direk value diyebiliyorum.


sorun nerde anlayamadım hala.
daha kafa patlatacağım gibi.
neyse kolaygelsin arkadaslar ilgilendiğiniz için teşekkürler yine de
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Selam,

forumun MSSQL kismina da sanirim ayni soruyu sormuşsunuz orada detayli bir aciklama yapmistim onceden isterseniz bi bakin o kisma..

Kolay gelsin
Cevapla