From 9a47164cf852e09c0402b373b544839740595ecf Mon Sep 17 00:00:00 2001 From: cz_012273 Date: Sat, 4 Jun 2022 10:07:35 +0800 Subject: [PATCH] =?UTF-8?q?DBGrid=E6=A0=87=E9=A2=98=E6=A0=8F=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E6=8E=92=E5=BA=8F=E5=8A=A0=E5=85=A5=E5=8D=87=E9=99=8D?= =?UTF-8?q?=E5=BA=8F=E6=A0=87=E5=BF=97=EF=BC=88=E4=B8=8A=E4=B8=8B=E7=AE=AD?= =?UTF-8?q?=E5=A4=B4=EF=BC=89=EF=BC=88=E5=B8=A6=E5=8F=82=E6=95=B0=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E5=AE=9E=E7=8E=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChaXun.pas | 2 +- ChuKu.pas | 2 +- DataUnit.dfm | 2 +- DataUnit.pas | 39 +++++++++++++++++++++++++++++---------- RuKu.pas | 2 +- TiShi.pas | 4 ++-- WZGL.dproj | 4 ++-- WZGL.res | Bin 112088 -> 112088 bytes 8 files changed, 37 insertions(+), 18 deletions(-) diff --git a/ChaXun.pas b/ChaXun.pas index 12d0112..d04bc07 100644 --- a/ChaXun.pas +++ b/ChaXun.pas @@ -66,7 +66,7 @@ end; procedure TForm4.DBGrid1TitleClick(Column: TColumn); begin - DM1.DBGridSort(Column); + DM1.DBGridSort(DBGrid1,Column); end; procedure TForm4.FormShow(Sender: TObject); diff --git a/ChuKu.pas b/ChuKu.pas index 9a60e6c..92b5c55 100644 --- a/ChuKu.pas +++ b/ChuKu.pas @@ -158,7 +158,7 @@ end; procedure TForm3.DBGrid1TitleClick(Column: TColumn); begin - DM1.DBGridSort(Column); + DM1.DBGridSort(DBGrid1,Column); end; procedure TForm3.DBLookupComboBox1CloseUp(Sender: TObject); diff --git a/DataUnit.dfm b/DataUnit.dfm index 960aa17..9f7ba83 100644 --- a/DataUnit.dfm +++ b/DataUnit.dfm @@ -6,8 +6,8 @@ object DM1: TDM1 object FDConnection1: TFDConnection Params.Strings = ( 'Database=E:\WZGL\WZGLK.db' + 'LockingMode=Normal' 'DriverID=SQLite') - Connected = True Left = 40 Top = 24 end diff --git a/DataUnit.pas b/DataUnit.pas index 125c8c5..bd23c5f 100644 --- a/DataUnit.pas +++ b/DataUnit.pas @@ -37,7 +37,7 @@ type DataSource8: TDataSource; SaveDialog1: TSaveDialog; procedure DataModuleCreate(Sender: TObject); - procedure DBGridSort(Column: TColumn); + procedure DBGridSort(DBGrid:TDBGrid; Column: TColumn); private { Private declarations } @@ -112,14 +112,15 @@ begin end; end; -procedure TDM1.DBGridSort(Column: TColumn); //DBgrid点击标题栏排序 +procedure TDM1.DBGridSort(DBGrid:TDBGrid; Column: TColumn); //DBgrid点击标题栏排序 var - SqlStr,myFieldName,TempStr: string; - i,OrderPos: integer; + SqlStr,myFieldName,TempStr,TitleStr: string; + i,OrderPos,colnum: integer; SavedParams: TParams; const colwidth:array[0..8] of integer = (4,20,6,10,10,6,16,4,14); //设定各列显示宽度 begin + if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit; //如果字段类型不属于物理字段或查询字段则退出 if Column.Field.FieldKind =fkData then @@ -130,9 +131,15 @@ begin while Pos(myFieldName,';')<>0 do //如果名称中包含分号 myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1) + ',' + copy(myFieldName,Pos(myFieldName,';')+1,100); //把分号变逗号 - with TFDQuery(TDBGrid(Column.Grid).DataSource.DataSet) do + with TFDQuery(DBGrid.DataSource.DataSet) do begin - close; + colnum:=column.index; + if (Pos('↑', column.Title.Caption) > 0) + or (Pos('↓', column.Title.Caption) > 0) then + column.Title.Caption := + Copy(column.Title.Caption, 3, + Length(column.Title.Caption) - 2); //如果字段名中包含上下箭头,去掉字段名前两个字符 + TitleStr := Column.Title.Caption; //取字段标题 SqlStr := UpperCase(Sql.Text); //SQL语句字符串大写 // if pos(myFieldName,SqlStr)=0 then exit; //如果SQL语句中不存在所选字段名,则退出 if ParamCount>0 then //如果运行过程时包含参数 @@ -146,23 +153,35 @@ begin OrderPos := pos('ORDER',SqlStr); //获取'ORDER'串在SQL语句中的起始位置 if (OrderPos=0) or (pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then //如不存在ORDER或ORDER子句中不包含所选字段 - TempStr := ' Order By ' + myFieldName + ' Asc' //生成按照所选字段升序排列的ORDER子句 + begin + TempStr := ' Order By ' + myFieldName + ' Asc'; //生成按照所选字段升序排列的ORDER子句 + TitleStr := '↑ ' + TitleStr; + end else if pos('ASC',SqlStr)=0 then //如果ORDER子句中有所选字段但不包含升序标志 - TempStr := ' Order By ' + myFieldName + ' Asc' //生成按所选字段升序排列的ORDER子句 + begin + TempStr := ' Order By ' + myFieldName + ' Asc'; //生成按照所选字段升序排列的ORDER子句 + TitleStr := '↑ ' + TitleStr; + end else //如果ORDER子句中有所选字段且包含升序标志 - TempStr := ' Order By ' + myFieldName + ' Desc'; //生成按所选字段降序排列的ORDER子句 + begin + TempStr := ' Order By ' + myFieldName + ' Desc'; //生成按所选字段降序排列的ORDER子句 + TitleStr := '↓ ' + TitleStr; + end; if OrderPos<>0 then SqlStr := Copy(SqlStr,1,OrderPos-1); //如果存在ORDER子句,提取ORDER子句之前的SQL语句内容 SqlStr := SqlStr + TempStr; //将其与新生成的ORDER子句连接 Active := False; //锁定QUERY状态 Sql.Clear; //清除SQL内容 Sql.Text := SqlStr; //更新SQL内容 + if ParamCount>0 then //如果运行过程时包含参数 begin Params.Assign(SavedParams); //提取保存的参数变量 SavedParams.Free; //释放参数变量 end; Prepare; //将带参数的SQL语句传给数据库引擎 - Open; //打开查询 + + if Not Active then Open ; //打开查询 + DBGrid.Columns[colnum].Title.Caption := TitleStr; for i:=0 to Fields.Count-1 do //循环读取常量数组,设定各列显示宽度 begin diff --git a/RuKu.pas b/RuKu.pas index f4b3a6a..bd4f00e 100644 --- a/RuKu.pas +++ b/RuKu.pas @@ -143,7 +143,7 @@ end; procedure TForm2.DBGrid1TitleClick(Column: TColumn); begin - DM1.DBGridSort(Column); + DM1.DBGridSort(DBGrid1,Column); end; procedure TForm2.DBLookupComboBox1CloseUp(Sender: TObject); diff --git a/TiShi.pas b/TiShi.pas index 8152aca..767a1e2 100644 --- a/TiShi.pas +++ b/TiShi.pas @@ -117,7 +117,7 @@ end; procedure TForm6.DBGrid1TitleClick(Column: TColumn); begin - DM1.DBGridSort(Column); + DM1.DBGridSort(DBGrid1,Column); end; procedure TForm6.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect; @@ -138,7 +138,7 @@ end; procedure TForm6.DBGrid2TitleClick(Column: TColumn); begin - DM1.DBGridSort(Column); + DM1.DBGridSort(DBGrid2,Column); end; end. diff --git a/WZGL.dproj b/WZGL.dproj index caca245..2d1e6b2 100644 --- a/WZGL.dproj +++ b/WZGL.dproj @@ -88,9 +88,9 @@ true 1033 true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.9.2;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.9.3;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 9 - 2 + 3 false diff --git a/WZGL.res b/WZGL.res index 8fd8a482c4a09ce6dbd407e1f6e75c1ae306e306..f8efa9644625eec1f2822a5cd338304a6bb2a98a 100644 GIT binary patch delta 24 gcmccdn(fAGwh1MS%o9rwGa5HrGH$nIWSqYR0EcD?ng9R* delta 24 gcmccdn(fAGwh1MSOcP5FGa5BpGH$nIWSqYR0EbNpm;e9( -- GitLab