Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизРедактирование запроса? Найти похожие ветки
← →
ForX (2006-02-20 13:26) [0]Есть ДБГрид в котором отображается запрос SELECT * FROM table.
По нажатию на Button1 открывается форма с полями DBEdit,
как эти поля заполнить значениями активной строки Грида, а потом записать если они изменились
← →
Ega23 © (2006-02-20 13:30) [1]Я обычно, простой 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) [2]
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.
← →
sanich © (2006-02-20 13:32) [3]В свойстве Dataset каждого DBEdit укажи тот же DataSet что и в DbGrid.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c