diff --git a/source/const.inc b/source/const.inc index 01023161..1d0d8b31 100644 --- a/source/const.inc +++ b/source/const.inc @@ -180,6 +180,7 @@ const REGNAME_TOOLSTREEWIDTH = 'TableTools_TreeWidth'; REGNAME_TOOLSFINDTEXT = 'TableTools_FindText'; REGNAME_TOOLSDATATYPE = 'TableTools_Datatype'; + REGNAME_TOOLSCASESENSITIVE = 'TableTools_FindCaseSensitive'; REGNAME_USERMNGR_WINWIDTH = 'Usermanager_WindowWidth'; REGNAME_USERMNGR_WINHEIGHT = 'Usermanager_WindowHeight'; REGNAME_USERMNGR_LISTWIDTH = 'Usermanager_ListWidth'; diff --git a/source/tabletools.dfm b/source/tabletools.dfm index 7a9d8148..a0878473 100644 --- a/source/tabletools.dfm +++ b/source/tabletools.dfm @@ -248,32 +248,41 @@ object frmTableTools: TfrmTableTools Caption = 'Text to find:' end object lblDataTypes: TLabel - Left = 80 - Top = 93 - Width = 151 + Left = 3 + Top = 67 + Width = 114 Height = 13 Anchors = [akLeft, akBottom] - Caption = 'Restrict search to column types' + Caption = 'Search in column types:' end object memoFindText: TMemo - Left = 80 + Left = 139 Top = 11 - Width = 289 - Height = 73 + Width = 230 + Height = 46 Anchors = [akLeft, akTop, akRight, akBottom] ScrollBars = ssVertical TabOrder = 0 OnChange = ValidateControls end object comboDataTypes: TComboBox - Left = 264 - Top = 90 - Width = 105 + Left = 139 + Top = 64 + Width = 230 Height = 21 Style = csDropDownList Anchors = [akLeft, akRight, akBottom] TabOrder = 1 end + object chkCaseSensitive: TCheckBox + Left = 139 + Top = 91 + Width = 230 + Height = 17 + Anchors = [akLeft, akRight, akBottom] + Caption = 'Case sensitive' + TabOrder = 2 + end end object tabSQLexport: TTabSheet Caption = 'SQL export' diff --git a/source/tabletools.pas b/source/tabletools.pas index c9a13a8a..45ad9807 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -65,6 +65,7 @@ type chkBulkTableEditCharset: TCheckBox; comboBulkTableEditCharset: TComboBox; btnSeeResults: TButton; + chkCaseSensitive: TCheckBox; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); @@ -174,6 +175,7 @@ begin for i:=Low(DatatypeCategories) to High(DatatypeCategories) do comboDatatypes.Items.Add(DatatypeCategories[i].Name); comboDatatypes.ItemIndex := GetRegValue(REGNAME_TOOLSDATATYPE, 0); + chkCaseSensitive.Checked := GetRegValue(REGNAME_TOOLSCASESENSITIVE, chkCaseSensitive.Checked); // SQL export tab chkExportDatabasesCreate.Checked := GetRegValue(REGNAME_EXP_CREATEDB, chkExportDatabasesCreate.Checked); @@ -213,6 +215,7 @@ begin MainReg.WriteString( REGNAME_TOOLSFINDTEXT, memoFindText.Text); MainReg.WriteInteger( REGNAME_TOOLSDATATYPE, comboDatatypes.ItemIndex); + MainReg.WriteBool(REGNAME_TOOLSCASESENSITIVE, chkCaseSensitive.Checked); MainReg.WriteBool(REGNAME_EXP_CREATEDB, chkExportDatabasesCreate.Checked); MainReg.WriteBool(REGNAME_EXP_DROPDB, chkExportDatabasesDrop.Checked); @@ -335,7 +338,7 @@ begin btnExecute.Enabled := SomeChecked and (memoFindText.Text <> ''); // Enable "See results" button if there were results btnSeeResults.Enabled := False; - for i:=0 to FResults.Count-1 do begin + if Assigned(FResults) then for i:=0 to FResults.Count-1 do begin if MakeInt(FResults[i][2]) > 0 then begin btnSeeResults.Enabled := True; break; @@ -563,8 +566,12 @@ begin if Columns.Count > 0 then begin SQL := ''; for Col in Columns do begin - if (comboDatatypes.ItemIndex = 0) or (Integer(Col.DataType.Category) = comboDatatypes.ItemIndex-1) then - SQL := SQL + Mainform.mask(Col.Name) + ' LIKE ' + esc('%'+memoFindText.Text+'%') + ' OR '; + if (comboDatatypes.ItemIndex = 0) or (Integer(Col.DataType.Category) = comboDatatypes.ItemIndex-1) then begin + if chkCaseSensitive.Checked then + SQL := SQL + Mainform.mask(Col.Name) + ' LIKE BINARY ' + esc('%'+memoFindText.Text+'%') + ' OR ' + else + SQL := SQL + 'LOWER(CONVERT('+Mainform.mask(Col.Name)+' USING '+DBObj.Connection.CharacterSet+')) LIKE ' + esc('%'+LowerCase(memoFindText.Text)+'%') + ' OR ' + end; end; if SQL <> '' then begin Delete(SQL, Length(SQL)-3, 3);