![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактирование запроса?
ForX © (2006-02-20 13:26:00)Есть ДБГрид в котором отображается запрос SELECT * FROM table.
По нажатию на Button1 открывается форма с полями DBEdit,
как эти поля заполнить значениями активной строки Грида, а потом записать если они изменились
sanich (2006-02-20 13:32:00) [1]В свойстве Dataset каждого DBEdit укажи тот же DataSet что и в DbGrid.
Ega23 (2006-02-20 13:30:00) [2]Я обычно, простой Edit использую. Пример:
unit uClassFields;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBCtrls, uDMMain, Db, ADODB, ExtCtrls, uKdrGPLib;
type
TFClassFields = class(TForm)
Label1: TLabel;
Label2: TLabel;
lcFldTypCod: TDBLookupComboBox;
eCLSFldNam: TEdit;
btnOK: TButton;
btnCancel: TButton;
aqFldTypCod: TADOQuery;
DSFldTypCod: TDataSource;
Bevel1: TBevel;
Label3: TLabel;
Label4: TLabel;
eCLSFldOrd: TEdit;
cbCLSFldMsk: TComboBox;
Label6: TLabel;
eCLSNam: TEdit;
Label7: TLabel;
eCLSFldCod: TEdit;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure DSFldTypCodDataChange(Sender: TObject; Field: TField);
procedure FormDestroy(Sender: TObject);
procedure IntegerEditKeyPress(Sender: TObject; var Key: Char);
procedure btnOKClick(Sender: TObject);
private
FMode: Integer;
procedure SetFMode(const Value: Integer);
function FoolProtection:Boolean;
public
{ Public declarations }
property Mode:Integer Read FMode Write SetFMode;
end;
var
FClassFields: TFClassFields;
implementation
{$R *.DFM}
//*****************************************************************************
procedure TFClassFields.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_ESCAPE then ModalResult:=mrCancel;
end;
//*****************************************************************************
procedure TFClassFields.FormCreate(Sender: TObject);
begin
DMMain.aKdrDBConnection.ConnectQueries(Self);
aqFldTypCod.Open;
end;
//*****************************************************************************
procedure TFClassFields.SetFMode(const Value: Integer);
var
ss:string;
begin
FMode := Value;
eCLSNam.Text:=DMMain.aqClasses.FieldByName('CLSNam').AsString;
if Value=0 then
begin
eCLSFldCod.Enabled:=True;
ss:='Select CLSFldCod=IsNull(Max(CLSFldCod)+1, 1) from ClassFields';
QuOpen(DMMain.aqTemp, ss);
eCLSFldCod.Text:=DMMain.aqTemp.FieldByName('CLSFldCod').AsString;
eCLSFldNam.Text:='';
eCLSFldOrd.Text:='100';
cbCLSFldMsk.ItemIndex:=1;
Caption:='Добавление поля; класс - '+eCLSNam.Text;
aqFldTypCod.First;
end;
if Value=1 then
begin
eCLSFldCod.Enabled:=False;
With DMMain.aqClassFields do
begin
eCLSFldCod.Text:=FieldByName('CLSFldCod').AsString;
eCLSFldNam.Text:=FieldByName('CLSFldNam').AsString;
eCLSFldOrd.Text:=FieldByName('CLSFldOrd').AsString;
cbCLSFldMsk.ItemIndex:=FieldByName('CLSFldMsk').AsInteger;
aqFldTypCod.Locate('FldtypCod', FieldByName('FldTypCod').AsInteger, []);
end; // With
Caption:='Изменение поля; класс - '+eCLSNam.Text;
end;
end;
//*****************************************************************************
Ega23 (2006-02-20 13:30:00) [3]
procedure TFClassFields.DSFldTypCodDataChange(Sender: TObject;
Field: TField);
begin
lcFldTypCod.KeyValue:=aqFldTypCod.FieldByName(lcFldTypCod.KeyField).AsVariant;
end;
//*****************************************************************************
procedure TFClassFields.FormDestroy(Sender: TObject);
begin
aqFldTypCod.Close;
aqFldTypCod.Connection:=nil;
end;
//*****************************************************************************
function TFClassFields.FoolProtection: Boolean;
var
ss:string;
i:Integer;
begin
Result:=False;
for i:=0 to ComponentCount-1 do
if (Components[i] is TEdit) then
TEdit(Components[i]).Text:=Trim(TEdit(Components[i]).Text);
if Mode=0 then
begin
try
StrToInt(eCLSFldCod.Text);
except on E:Exception do
begin
eCLSFldCod.SetFocus;
MessageBox(Handle, PChar('Неверно задан код метода!'),
PChar('Внимание!'), MB_OK or MB_ICONWARNING);
Exit;
end;
end;
ss:='Declare @X int; Set NoCount ON; Set @X=0; '+
'Select @X=1 from ClassFields where CLSFldCod='+eCLSFldCod.Text+'; '+
'Set NoCount OFF; Select X=@X;';
QuOpen(DMMain.aqTemp, ss);
if DMMain.aqTemp.FieldByName('X').AsInteger=1 then
begin
eCLSFldCod.SetFocus;
MessageBox(Handle, PChar('Метод с кодом '+eCLSFldCod.Text+' уже существует!'),
PChar('Внимание!'), MB_OK or MB_ICONWARNING);
Exit;
end;
end; // if Mode=0 then
if eCLSFldNam.Text='' then
begin
eCLSFldNam.SetFocus;
MessageBox(Handle, PChar('Не задано название метода!'),
PChar('Внимание!'), MB_OK or MB_ICONWARNING);
Exit;
end;
try
StrToInt(eCLSFldOrd.Text);
except on E:Exception do
begin
eCLSFldOrd.SetFocus;
MessageBox(Handle, PChar('Неверно задан порядок!'),
PChar('Внимание!'), MB_OK or MB_ICONWARNING);
Exit;
end;
end;
Result:=True;
end;
//*****************************************************************************
procedure TFClassFields.IntegerEditKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then Key:=#0;
end;
//*****************************************************************************
procedure TFClassFields.btnOKClick(Sender: TObject);
var
ss:String;
CLSFldCod:Integer;
begin
if not FoolProtection then Exit;
With DMMain, aqClassFields do
begin
ss:='exec S_RTTIProc @ActNam=';
if Mode=0 then ss:=ss+ValX('ClassFields.Add',',');
if Mode=1 then ss:=ss+ValX('ClassFields.Upd',',');
ss:=ss+' @CLSID='+ValX(aqClasses.FieldByName('CLSID').AsInteger,',')+
' @CLSFldCod='+eCLSFldCod.Text+','+
' @OrgCLSID='+ValX(aqClasses.FieldByName('CLSID').AsInteger,',')+
' @FldTypCod='+ValX(aqFldTypCod.FieldByName('FldTypCod').AsInteger,',')+
' @CLSFldNam='+ValX(eCLSFldNam.Text,',')+
' @CLSFldMsk='+ValX(cbCLSFldMsk.ItemIndex,',')+
' @CLSFldOrd='+eCLSFldOrd.Text;
end;
QuOpen(DMMain.aqTemp, ss);
CLSFldCod:=DMMain.aqTemp.FieldByName('Result').AsInteger;
QuOpen(DMMain.aqClassFields);
DMMain.aqClassFields.Locate('CLSFldCod', CLSFldCod, []);
ModalResult:=mrOK;
end;
end.