bir A listem var her kaydın altında da başka B kayırlar var,
dbgrid cell clik olayına nasıl bir şey yapabilirim ki, aşağıdaki sql sorgusunu hazırlayayım
bir kayıtta seçebilir birden fazla kayıtta seçebilirim
procedure TTEKNIK_SERVIS_PENCERE.dbgrd1CellClick(Column: TColumn);
begin
mmo1.Lines.Add(''QRYSERVIS_KAYIT_DBSERVIS_ID.Text);
end;
select * from TEKNIK_SERVIS_DETAY WHERE SERVIS_ID IN ('1', '2', '5')
Normalde TDBGrid bahsettiğiniz şekilde br özelliğe sahip değildir.
Alternatif yöntem olarak:
1- Tablo içine seçim gibi bir kolon ekleyerek "seçim modu" gibi bir uygulama modifikasyonu ile tıklanan satırın seçili/seçili değil ayarlarını yapabilirsiniz. Ardından sadece seçili olan kayıtlar için istediğiniz sorguyu hazırlayabilirsiniz.
2- MemoryTable kullanarak mevcut kayıtların kopyasını alabilir. Seçim kolonunu MemoryTable alanı olarak kullanabilirsiniz. Yöntem 1 numaralı gibi olacak ancak bu şekilde kullanım ile database tablolarında değişiklik gerekmeyecektir.
Hocam cevabınız için teşekkür ederim, eğer başka çözüm yok ise, şu kayıtları aktar diyip bir kutucuğa 1,2,3,5,9 yazıp bunu da sql formatına dönüştürcem artık daha mantıklı gibi
Const
//Tab character
Delim = CHR(9);
var
i: Integer;
x: Integer;
S: String;
Y: String;
begin
//Copy Fieldnames First
Y := '';
for x := 0 to dbgrd1.Columns.Count - 1 do
Y := Y + (format('%s',[dbgrd1.columns[x].title.caption]))+ Delim;
mmo1.Lines.Add(Y);
//Copy Field contents
if dbgrd1.SelectedRows.Count > 0 then
begin
with dbgrd1.DataSource.DataSet do
begin
for i := 0 to dbgrd1.SelectedRows.Count-1 do
begin
//Bookmark sets the position of the selection
S := '';
GotoBookmark(Tbookmark(dbgrd1.SelectedRows[i]));
for x := 0 to dbgrd1.Columns.Count - 1 do
Begin
S := S + (format('%s',[dbgrd1.columns[x].field.asString]))+ Delim;
end;
mmo1.Lines.Add(S);
end;
end;
end;
Aşağıdaki kod ile işimi çözüyorum ama şöyle bir sorunum var sql sorgusunda eğer bir kayıt seçili ise virgül koymasın birden fazla seçili ise de son kayıta virgül koymasın
nasıl yapabilirim ?
procedure TTEKNIK_SERVIS_PENCERE.pmSERVIS_POPUPPopup(Sender: TObject);
var
i,x: Integer;
S,Y: String;
begin
begin
mmo1.Lines.Clear;
mmo1.Lines.Add('select * from TEKNIK_SERVIS_STOK_DETAY WHERE SERVIS_KIMLIK IN (');
end;
if dbgrd1.SelectedRows.Count > 0 then
begin
with dbgrd1.DataSource.DataSet do
begin
for i := 0 to dbgrd1.SelectedRows.Count-1 do
begin
S := '';
GotoBookmark(Tbookmark(dbgrd1.SelectedRows[i]));
for x := 0 to dbgrd1.Columns.Count - 1 do
Begin
S := Format('%s',[dbgrd1.Columns[1].Field.AsString]);
end;
mmo1.Lines.Add(''+#39+S+#39+',');
end;
end;
end;
begin
mmo1.Lines.Add(')');
end;
//Copy Fieldnames First
Y := '';
for x := 0 to dbgrd1.Columns.Count - 1 do
Y := Y + (format('%s',[dbgrd1.columns[x].title.caption]))+ Delim;
mmo1.Lines.Add(Y);
Aşağıdaki kod ile işimi çözüyorum ama şöyle bir sorunum var sql sorgusunda eğer bir kayıt seçili ise virgül koymasın birden fazla seçili ise de son kayıta virgül koymasın
nasıl yapabilirim ?
procedure TTEKNIK_SERVIS_PENCERE.pmSERVIS_POPUPPopup(Sender: TObject);
var
i,x: Integer;
S,Y: String;
begin
begin
mmo1.Lines.Clear;
mmo1.Lines.Add('select * from TEKNIK_SERVIS_STOK_DETAY WHERE SERVIS_KIMLIK IN (');
end;
if dbgrd1.SelectedRows.Count > 0 then
begin
with dbgrd1.DataSource.DataSet do
begin
for i := 0 to dbgrd1.SelectedRows.Count-1 do
begin
S := '';
GotoBookmark(Tbookmark(dbgrd1.SelectedRows[i]));
for x := 0 to dbgrd1.Columns.Count - 1 do
Begin
S := Format('%s',[dbgrd1.Columns[1].Field.AsString]);
end;
mmo1.Lines.Add(''+#39+S+#39+',');
end;
end;
end;
begin
mmo1.Lines.Add(')');
end;
procedure TTEKNIK_SERVIS_PENCERE.pmSERVIS_POPUPPopup(Sender: TObject);
var
i,x: Integer;
S: String;
begin
mmo1.Lines.Clear;
mmo1.Lines.Add('select * from TEKNIK_SERVIS_STOK_DETAY WHERE SERVIS_KIMLIK IN (');
if dbgrd1.SelectedRows.Count > 0 then
begin
with dbgrd1.DataSource.DataSet do
begin
for i := 0 to dbgrd1.SelectedRows.Count-1 do
begin
S := EmptyStr;
GotoBookmark(Tbookmark(dbgrd1.SelectedRows[i]));
for x := 0 to dbgrd1.Columns.Count - 1 do
begin
S := dbgrd1.Columns[1].Field.AsString;
end;
mmo1.Lines.Add(QuotedStr(S)+',');
end;
end;
end;
// Eğer Memo içinde satır varsa
if mmo1.Lines.Count > 0 then
begin
// Son satırın son karakteri virgül ise sil
S := mmo1.Lines[mmo1.Lines.Count-1];
if S[Length(S)] = ',' then
begin
SetLength(S, Length(S)-1);
mmo1.Lines[mmo1.Lines.Count-1] := S;
end;
end;
mmo1.Lines.Add(')');
end;
- Android üzerinde birebir aynı kodu kullandığınıza emin misiniz?
- Aşağıdaki gibi bir iki noktaya ShowMessage() eklediğinizde yapması gereken ama yapmadığı bir noktayı anlayabiliyor musunuz?
procedure TTEKNIK_SERVIS_PENCERE.pmSERVIS_POPUPPopup(Sender: TObject);
var
i,x: Integer;
S: String;
begin
mmo1.Lines.Clear;
mmo1.Lines.Add('select * from TEKNIK_SERVIS_STOK_DETAY WHERE SERVIS_KIMLIK IN (');
if dbgrd1.SelectedRows.Count > 0 then
begin
with dbgrd1.DataSource.DataSet do
begin
for i := 0 to dbgrd1.SelectedRows.Count-1 do
begin
S := EmptyStr;
GotoBookmark(Tbookmark(dbgrd1.SelectedRows[i]));
for x := 0 to dbgrd1.Columns.Count - 1 do
begin
S := dbgrd1.Columns[1].Field.AsString;
end;
mmo1.Lines.Add(QuotedStr(S)+',');
end;
end;
end;
// Eğer Memo içinde satır varsa
if mmo1.Lines.Count > 0 then
begin
ShowMessage('Memo içinde satır var'); // kontrol amaçlı
// Son satırın son karakteri virgül ise sil
S := mmo1.Lines[mmo1.Lines.Count-1];
ShowMessage('Düzenlenen bilgi: ' + AnsiQuotedStr(S, '"')); // kontrol amaçlı
if S[Length(S)] = ',' then
begin
ShowMessage('Düzenlenen bilgi son karakteri virgül olarak algılandı'); // kontrol amaçlı
SetLength(S, Length(S)-1);
ShowMessage('Düzenlenmiş bilgi son hali: ' + AnsiQuotedStr(S, '"')); // kontrol amaçlı
mmo1.Lines[mmo1.Lines.Count-1] := S;
end;
end;
mmo1.Lines.Add(')');
end;