⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editorquery.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  if(DMGUI.UseSQLSyntaxHighlighting)then
  begin
    SQLMemo.Hide;
    SQLSynEdit.Show;
  end
  else
  begin
    SQLMemo.Show;
    SQLSynEdit.Hide;
  end;

{$ENDIF}
end;

procedure TEditorQueryForm.FormDestroy(Sender: TObject);
begin
  if(Visible)then
    DMMain.SaveWinPos(self, True);

  //Free the Hint Window
  theHintWindow.ReleaseHandle;
end;

procedure TEditorQueryForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  //Apply last changes
  if(OutputClientDataSet.Active)then
    if(OutputClientDataSet.ChangeCount>0)then
      OutputClientDataSet.ApplyUpdates(-1);

  Action:=caFree;
end;

procedure TEditorQueryForm.FormResize(Sender: TObject);
begin
  DBConnEd.Width:=TopPnl.Width-502;
  GetDBConnSBtn.Left:=DBConnEd.Left+DBConnEd.Width+5;
end;

procedure TEditorQueryForm.FormShow(Sender: TObject);
begin
  DMMain.RestoreWinPos(self, True);

  FormResize(self);
end;

function TEditorQueryForm.SetTable(theTable: TEERTable): Boolean;
var theTables: TStringList;
  i, j: integer;
  s: string;
begin
  SetTable:=False;

  DBGrid.Columns.Clear;
  DBMemo.DataField:='';
  DBImage.DataField:='';

  if(theTable=nil)then
    Exit;

  theEERTable:=theTable;
  theEERModel:=TEERModel(theEERTable.Parent);

  theTables:=TStringList.Create;
  try
    TableCBox.Items.Clear;
    theEERModel.GetEERObjectNameList([EERTable], theTables);

    TableCBox.Items.Assign(theTables);
    TableCBox.ItemIndex:=TableCBox.Items.IndexOf(theEERTable.ObjName);
  finally
    theTables.Free;
  end;


  //when not connected to DB, connect now
  if(DMDB.CurrentDBConn=nil)then
  begin
    DMDB.GetDBConnButtonClick(self, theEERModel.DefQueryDBConn);
    if(DMDB.CurrentDBConn<>nil)then
    begin
      theEERModel.DefQueryDBConn:=DMDB.CurrentDBConn.Name;
      SetTable:=True;
    end
    else
      Exit;
  end
  else
  begin
    SetTable:=True;

    //Apply changes before closing
    if(OutputClientDataSet.Active)then
      if(OutputClientDataSet.ChangeCount>0)then
        OutputClientDataSet.ApplyUpdates(-1);

    OutputQry.Close;
    OutputClientDataSet.Close;
  end;

  DBConnEd.Text:=TDBConn(DMDB.CurrentDBConn).Name;

  s:='SELECT * '+#13#10+
    'FROM '+theEERTable.ObjName;
  for i:=0 to theEERTable.Indices.Count-1 do
  begin
    if(CompareText(TEERIndex(theEERTable.Indices[i]).IndexName,
      'PRIMARY')=0)then
    begin
      if(TEERIndex(theEERTable.Indices[i]).Columns.Count>0)then
        s:=s+#13#10+
          'ORDER BY ';

      for j:=0 to TEERIndex(theEERTable.Indices[i]).Columns.Count-1 do
      begin
        s:=s+TEERColumn(theEERTable.GetColumnByID(StrToInt(TEERIndex(theEERTable.Indices[i]).Columns[j]))).ColName;

        if(j<TEERIndex(theEERTable.Indices[i]).Columns.Count-1)then
          s:=s+', ';
      end;

      break;
    end;
  end;

  SetSQLMemoText(s);

  ExecSQLBtnClick(self);
end;

procedure TEditorQueryForm.SizeGridCols;
var i: integer;
  theColumn: TColumn;
  theSize: TSize;
begin
  DBGrid.Columns.Clear;

  for i:=0 to OutputClientDataSet.Fields.Count-1 do
  begin
    theColumn:=DBGrid.Columns.Add;
    theColumn.Field:=OutputClientDataSet.Fields[i];
    theSize:=DBGrid.Canvas.TextExtent(theColumn.Field.DisplayName);

    if(theColumn.Field.DataType=ftSmallint)or
      (theColumn.Field.DataType=ftInteger)or
      (theColumn.Field.DataType=ftWord)or
      (theColumn.Field.DataType=ftLargeint)or
      (theColumn.Field.DataType=ftAutoInc)then
      theColumn.Width:=60
    else if(theColumn.Field.DataType=ftString)or
      (theColumn.Field.DataType=ftFixedChar)or
      (theColumn.Field.DataType=ftWideString)then
      theColumn.Width:=120
    else if(theColumn.Field.DataType=ftDateTime)or
      (theColumn.Field.DataType=ftTimeStamp)then
      theColumn.Width:=110
    else if(theColumn.Field.DataType=ftDate)or
      (theColumn.Field.DataType=ftTime)then
      theColumn.Width:=80
    else
      theColumn.Width:=50;

    if(theColumn.Width<theSize.Cx+5)then
      theColumn.Width:=theSize.Cx+5;
  end;

  DBGridColEnter(self);
end;

procedure TEditorQueryForm.ApplyChanges;
begin
  //
end;

procedure TEditorQueryForm.GetDBConnSBtnClick(Sender: TObject);
begin
  SetTable(theEERTable);
end;

procedure TEditorQueryForm.TableCBoxChange(Sender: TObject);
var theTable: TEERTable;
begin
  theTable:=TEERModel(theEERTable.Parent).GetEERObjectByName(EERTable, TableCBox.Items[TableCBox.ItemIndex]);

  if(theTable<>nil)then
    SetTable(theTable);
end;

procedure TEditorQueryForm.SubmitBtnClick(Sender: TObject);
begin
  if(OutputClientDataSet.Active)then
    if(OutputClientDataSet.ChangeCount>0)then
      OutputClientDataSet.ApplyUpdates(-1);
end;

procedure TEditorQueryForm.CancelBtnClick(Sender: TObject);
begin
  if(OutputClientDataSet.Active)then
  begin
    OutputClientDataSet.Close;
    OutputClientDataSet.Open;
  end;
end;

procedure TEditorQueryForm.DBGridColEnter(Sender: TObject);
var theStream: TMemoryStream;
  thePicture: TPicture;
  //i, toRead: integer;
  theBuffer: Array [0..1024] of Char;
  theText: Array [0..2048] of Char;
begin
  DBMemo.DataField:='';
  DBImage.DataField:='';

  if(DBGrid.SelectedField<>nil)then
  begin
    //String / Text
    if(DBGrid.SelectedField.ClassNameIs('TMemoField'))or
      (DBGrid.SelectedField.ClassNameIs('TStringField'))or
      (DBGrid.SelectedField.ClassNameIs('TWideStringField'))or
      (DBGrid.SelectedField.ClassNameIs('TAutoIncField'))then
    begin
      BlobPageControl.Activepage:=TextSheet;
      DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
    end
    //Numeric
    else if(DBGrid.SelectedField.ClassNameIs('TAutoIncField'))or
      (DBGrid.SelectedField.ClassNameIs('TBooleanField'))or
      (DBGrid.SelectedField.ClassNameIs('TFloatField'))or
      (DBGrid.SelectedField.ClassNameIs('TGuidField'))or
      (DBGrid.SelectedField.ClassNameIs('TIntegerField'))or
      (DBGrid.SelectedField.ClassNameIs('TLargeintField'))or
      (DBGrid.SelectedField.ClassNameIs('TSmallIntField'))then
    begin
      BlobPageControl.Activepage:=TextSheet;
      DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
    end
    else if(DBGrid.SelectedField.ClassNameIs('TGraphicField'))or
      (DBGrid.SelectedField.ClassNameIs('TBlobField'))then
    begin
      thePicture:=TPicture.Create;
      try
        theStream:=TMemoryStream.Create;
        try
          try
            DeleteFile('blob_tmp.png');
            //TBlobField(DBGrid.SelectedField).SaveToStream(theStream);
            TBlobField(DBGrid.SelectedField).SaveToFile('blob_tmp.png');

            //Try to display as Image
            thePicture.LoadFromFile('blob_tmp.png');

            DBImage.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
            BlobPageControl.Activepage:=ImgSheet;
          except
            //if it is in another format, display as blob
            BlobMemo.Lines.LoadFromFile('blob_tmp.png');

            //Display Hex Data
            BlobHexMemo.Text:='';
            TBlobField(DBGrid.SelectedField).SaveToStream(theStream);

            {toRead:=theStream.Size;
            if(toRead>1024)then
              toRead:=1024;
            theStream.Read(theBuffer, 1024);}

            BinToHex(theBuffer, theText, 1024);
            BlobHexMemo.Text:=String(theText);

            BlobPageControl.Activepage:=BlobSheet;
          end;
        finally
          theStream.Free;
          DeleteFile('blob_tmp.png');
        end;
      finally
        thePicture.Free;
      end;
    end
    else
    begin
      BlobPageControl.Activepage:=ClearSheet;
    end;
  end;
end;

procedure TEditorQueryForm.BlobClearBtnClick(Sender: TObject);
begin
  if(DBGrid.SelectedField=nil)then
    Exit;

  if(Not(OutputClientDataSet.State=dsEdit))or
    (Not(OutputClientDataSet.State=dsInsert))then
    OutputClientDataSet.Edit;

  DBGrid.SelectedField.Clear;
end;

procedure TEditorQueryForm.BlobOpenBtnClick(Sender: TObject);
var theOpenDialog: TOpenDialog;
  RecentOpenBlobFieldDir: string;
  theIni: TMemIniFile;
  thePicture: TPicture;
begin
  if(DBGrid.SelectedField=nil)then
    Exit;

  if(Not(OutputClientDataSet.Active))then
    Exit;

  if(Not(OutputClientDataSet.State=dsEdit))or
    (Not(OutputClientDataSet.State=dsInsert))then
    OutputClientDataSet.Edit;

  //Open IniFile
  theIni:=TMemIniFile.Create(DMMain.SettingsPath+DMMain.ProgName+'_Settings.ini');
  try
    theOpenDialog:=TOpenDialog.Create(nil);
    try
  {$IFDEF MSWINDOWS}
      //On Windows use native Win32 Open Dlg
      theOpenDialog.UseNativeDialog:=True;
      theOpenDialog.OnShow:=DMMain.OnOpenSaveDlgShow;
  {$ENDIF}

      theOpenDialog.Title:=DMMain.GetTranslatedMessage('Open a File ...', 89);
      theOpenDialog.DefaultExt:='';
      theOpenDialog.Filter:=DMMain.GetTranslatedMessage('All files', 90)+' (*.*)|*.*';
      theOpenDialog.Width:=600;
      theOpenDialog.Height:=450;

      //Get last dir
      RecentOpenBlobFieldDir:=theIni.ReadString('RecentDirectories', 'RecentOpenBlobFieldDir', '');

      if(DirectoryExists(RecentOpenBlobFieldDir))then
        theOpenDialog.InitialDir:=RecentOpenBlobFieldDir
      else
        theOpenDialog.InitialDir:='';


      if(theOpenDialog.Execute)then
      begin
        RecentOpenBlobFieldDir:=ExtractFilePath(theOpenDialog.Filename);

        if(DBGrid.SelectedField.ClassNameIs('TBlobField'))or
          (DBGrid.SelectedField.ClassParent.ClassNameIs('TBlobField'))then
        begin
          DBImage.DataField:='';
          DBMemo.DataField:='';

          //Memo Field
          if(DBGrid.SelectedField.ClassNameIs('TMemoField'))then
          begin
            TMemoField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);
            DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
          end
          else
          //Blob or Image Field
          begin
            TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);

            thePicture:=TPicture.Create;
            try
              try
                //try to open as Image
                thePicture.LoadFromFile(theOpenDialog.Filename);

                DBImage.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
                BlobPageControl.ActivePage:=ImgSheet;
              except
                BlobPageControl.ActivePage:=BlobSheet;
                TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);

                DBGridColEnter(self);
              end;
            finally
              thePicture.Free;
            end;
          end;
        end;

        {if(DBGrid.SelectedField.ClassNameIs('TMemoField'))then
          TMemoField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename)
        else if(DBGrid.SelectedField.ClassNameIs('TGraphicField'))then
          TGraphicField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename)
        else if(DBGrid.SelectedField.ClassNameIs('TBlobField'))then
          TBlobField(DBGrid.SelectedField).LoadFromFile(theOpenDialog.Filename);}

        theIni.WriteString('RecentDirectories', 'RecentOpenBlobFieldDir', RecentOpenBlobFieldDir);
      end;

    finally
      theOpenDialog.Free;
    end;

    theIni.UpdateFile;
  finally
    theIni.Free;
  end;
end;

procedure TEditorQueryForm.StoreBlobBtnClick(Sender: TObject);
var theSaveDialog: TSaveDialog;
  RecentSaveBlobFieldDir, theFileName: string;
  theIni: TMemIniFile;
  theStringList: TStringList;
begin
  if(DBGrid.SelectedField=nil)then
    Exit;

  if(Not(OutputClientDataSet.Active))then
    Exit;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -