2 Star 6 Fork 5

吕不为 / dbhelper

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
MainFrm.pas 136.61 KB
一键复制 编辑 原始数据 按行查看 历史
吕不为 提交于 2017-08-30 09:00 . init
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641
unit MainFrm;
{* <PRE>
================================================================================
* 单元名称:MainFrm
* 版本编号:1.00
* 功能描述:系统程序,加载系统各种功能包。
* 单元作者:LHQ
* 创建日期:2005-10-11
* 修改人员:
* 修改日期:
* 修改原因:2005-10-11 LHQ 增加两个表字段比较的功能。
2005-12-02 LHQ 增加-P -U -S参数.
2006-1-13 LHQ 增加生成删除SQL语句的功能。
2006-01-22 LHQ 增加生成Update功能的语句。
2006-02-16 LHQ 增加了对数据集进行样式保存及恢复的功能.
2006-07-13 LHQ 增加了对字段的定位功能
2006-07-18 LHQ 增加了快速导出功能,用于当记录有几百上千条时,普通的导出会很慢,因为要刷新Grid.
导出当前结果集SQL语句到文件中
批更新功能的实现,从当前记录到最指定的最大记录数为止的数据集将被指定的数值进行更新
2006-7-19 LHQ
显示在当前字段中选中的列,颜色用指定的颜色显示,可以设置
取消所有的选中的列
可通过设置选中的颜色值
隐藏当前的列
对字段的正排序及反排序功能。
增加了导入DBF文件的功能.
导出SQL时,如果是隐藏的列则不导出这列
增加导出Update语句的功能
当字段是Memo字段时,双击显示字段内容
增加可以增加字段的功能.
2006-9-7 增加Base列表和选择列表和当前字段的 列表,每个列表内含Name,Code.
增加多级脚本菜单的支持.
2006-9-25 LHQ 增加对打开文件,保存文件,打开文件夹对话框的支持.
!!!!!!!!!!!!!! LHQ 一定要注意,解码后的SQL语句不能最后带分号;否则创建表的语句会异常.
目前还没有查找到原因 !!!!!!!!!!!!!!!
2008-05-02 LHQ 增加了得到视图,存储过程及函数的代码的功能
2008-05-02 LHQ 发现一个大问题,在Sqlserver中,如果表名用[]括起来,则其中Select出来的数据
不能被修改,是只读的.有时候因为表名中有空格,所以要用[]包起来,但这样就不能编辑打开的
数据了.原来为了得到一个空的结果集好处理字段名及字段类型,用了where 1<>1得到.
现在调用GetColumnsNames函数,他底层调用了Sqlserver的
exec sp_columns 'jobs', null, null, null过程.这个过程将效率更高,可以避免表表钏有空格的问题
用双引号引用表名即可
2008-05-02 LHQ 在点周删除按钮时,一下删除两条的怪现象,经检查,原来是重复删除的定时器定的太短了
订成500ms即可
2008-05-02 LHQ 增加自动纠正功能,把select 理正成SELECT 正更文件是Correct.txt
08:41 2008-05-06 LHQ
Oracle的Date类型可以存储时间的内容,但是对应成为Delphi的类型为TDate类型,这时,显示不出来时间的值
,因此,修改底层接口的实现,对应成Delphi的TDateTime类型.这样就可以显示时间的内容了.在底层接口单元
*ora*.pas中,有LHQ的注释可以看
2008-07-03 增加显示的字段列表的的排序
2010-02-08 LHQ 增加DB2的ADO支持.
2010-5-27 LHQ 改成3.0,更改API为面象对向的方式,重构代码
2012-01-23 LHQ 改成D7可以编译的,改脚本为PASCAL脚本
2014-5-18 LHQ 增加表结构显示功能和去除小BUG
================================================================================
|</PRE>}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, StdCtrls, ExtCtrls, Buttons, ComCtrls, Shellapi, FileCtrl,
ActnList, jpeg, clipbrd, IniFiles, Menus, USQLOperator, UToolsList, UDbList,
DBGridEh, CheckLst, Variants, AppEvnts, DBGridEhFindDlgs,
PrnDbgeh, GridsEh, XPMenu, USQLEditorControl, RegExpr, UDM,
DBGridEhImpExp, ZAbstractDataset, DBSumLst, SynEdit, SynMemo, PropStorageEh,
ZAbstractRODataset, uUPClickSplitter, fs_iinterpreter, fs_idbrtti,
fs_iformsrtti, fs_igraphicsrtti, fs_iclassesrtti, fs_tree, fs_idialogsrtti,
fs_ipascal, DBGridEhGrouping, IdBaseComponent, IdComponent, MemTableEh,
IdTCPConnection, IdTCPClient, ToolWin, IdHTTP, ToolCtrlsEh,
DBGridEhToolCtrls, DBAxisGridsEh, UListViewEx, QBFloatTable, QBWindow, QBParser,
QBPgWindow, UMyDiagram, QBFloatPanel, EhLibJPegImage, SynHighlighterSQL, uLkJSON;
const
WM_DragFiles = WM_USER + 2500;
type
TMenuItemEx = class(TMenuItem)
public
FileName: string;
FuncName: string;
end;
TActionEx = class(TAction)
public
FileName: string;
FuncName: string;
end;
TMainForm = class(TForm)
dlgSave: TSaveDialog;
actLst: TActionList;
actFilter: TAction;
pmUSTable: TPopupMenu;
actReOpen: TAction;
actRun: TAction;
dlgOpen: TOpenDialog;
mm1: TMainMenu;
miHelp: TMenuItem;
miData: TMenuItem;
StatusBar: TStatusBar;
cmdDataBase: TMenuItem;
N13: TMenuItem;
actTableStruct: TAction;
actSQLData: TAction;
actProcedure: TAction;
actTriger: TAction;
actOneInsert: TAction;
actManyInsert: TAction;
actDeleteOne: TAction;
actOpenDict: TAction;
actUpdateDict: TAction;
actOpenDict1: TMenuItem;
miAbout: TMenuItem;
miOption: TMenuItem;
actOption: TAction;
pmGrd: TPopupMenu;
N31: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MenuItem5: TMenuItem;
cmdHideThisField: TMenuItem;
N12: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
actShowBlob: TAction;
actBatchAdd: TAction;
actOpenDB: TAction;
actModifyTable: TAction;
actTableDiff: TAction;
actRebuildView: TAction;
actToolsOption: TAction;
miConfTools: TMenuItem;
miPlugins: TMenuItem;
GenerateInsert1: TMenuItem;
Insert1: TMenuItem;
actSelectAll: TAction;
cmdMinColWidth: TMenuItem;
miOpenApplicatioinDir: TMenuItem;
autofit1: TMenuItem;
actDeletSQL: TAction;
Delete1: TMenuItem;
a1: TMenuItem;
actDataSetDelete: TAction;
Delete2: TMenuItem;
N26: TMenuItem;
actLockDataStyle: TAction;
N27: TMenuItem;
actDropProc: TAction;
pmFieldList: TPopupMenu;
MenuItem6: TMenuItem;
actTruncateTable: TAction;
N21: TMenuItem;
pnlData: TPanel;
spl1: TSplitter;
grpList: TPanel;
tlb1: TToolBar;
tlbTool: TToolBar;
btnSelectDB: TToolButton;
btnInsertOne: TToolButton;
btnInsert: TToolButton;
btnDelRecord: TToolButton;
tlb2: TToolBar;
edtSelect: TEdit;
actFilterFields: TAction;
edtFields: TEdit;
btnQuickInsert: TToolButton;
actExportToFIle: TAction;
BatchUpdate1: TMenuItem;
cmdShowSelectedFields: TMenuItem;
cmdHideSelectedFields: TMenuItem;
cmdShowAllFields: TMenuItem;
cmdCopyFieldsName: TMenuItem;
actImportDB: TAction;
actSaveTable: TAction;
Update1: TMenuItem;
actExportSP2File: TAction;
actExportTable2File: TAction;
N35: TMenuItem;
btnReOpenDB: TToolButton;
actReOpenDB: TAction;
actAddField: TAction;
N36: TMenuItem;
actTableRowCount: TAction;
N39: TMenuItem;
actInsertFromTable: TAction;
actReg: TAction;
N3: TMenuItem;
N42: TMenuItem;
miPyScript: TMenuItem;
miOpenScriptDir: TMenuItem;
actEditDataFile: TAction;
actShowTable: TAction;
actShowView: TAction;
actShowProcedure: TAction;
miShowTable: TMenuItem;
miShowView: TMenuItem;
miProcedure: TMenuItem;
N46: TMenuItem;
N47: TMenuItem;
actExportHTML: TAction;
actExportRTF: TAction;
HTML1: TMenuItem;
RTF1: TMenuItem;
actExportXLS: TAction;
ExcelE1: TMenuItem;
actExportSVC: TAction;
SVCS1: TMenuItem;
actPrint: TAction;
P2: TMenuItem;
PrintDBGridEh1: TPrintDBGridEh;
actWordCorrect: TAction;
C2: TMenuItem;
tlbSQLEditor: TToolBar;
btnSQLEditorSave: TToolButton;
actSQLEditorNew: TAction;
actSQLEditorSave: TAction;
actSQLEditorChangeSize: TAction;
btnSQLEditorOpen: TToolButton;
actSQLEditorOpen: TAction;
btnRun: TToolButton;
miExit: TMenuItem;
actSQLEditorCLose: TAction;
actRunSQLEditorWord: TAction;
pgcDataView: TPageControl;
tsDataView: TTabSheet;
tsSQLViewer: TTabSheet;
pmnuDataSQL: TPopupMenu;
lmiEditUndo: TMenuItem;
lmiEditRedo: TMenuItem;
MenuItem1: TMenuItem;
lmiEditCut: TMenuItem;
lmiEditCopy: TMenuItem;
lmiEditPaste: TMenuItem;
lmiEditDelete: TMenuItem;
MenuItem7: TMenuItem;
lmiEditSelectAll: TMenuItem;
MenuItem8: TMenuItem;
MenuItem9: TMenuItem;
HTM1: TMenuItem;
MenuItem10: TMenuItem;
MenuItem11: TMenuItem;
P1: TMenuItem;
tsMessages: TTabSheet;
mmoMessages: TMemo;
actFind: TAction;
actFindNext: TAction;
actReplace: TAction;
actPrev: TAction;
miReLoadScript: TMenuItem;
actReLoadScript: TAction;
N8: TMenuItem;
actOptColWidth: TAction;
A2: TMenuItem;
ApplicationEvents1: TApplicationEvents;
pnlLeft: TPanel;
lstTable: TListBox;
tlbDataEdit: TToolBar;
btnDataCommit: TToolButton;
btnDataRollBack: TToolButton;
Update2: TMenuItem;
N43: TMenuItem;
DBSumList1: TDBSumList;
actExecCmd: TAction;
N52: TMenuItem;
IniPropStorageManEh1: TIniPropStorageManEh;
N53: TMenuItem;
N55: TMenuItem;
Insert3: TMenuItem;
miHelpFile: TMenuItem;
pnlFieldFilter: TPanel;
tmrDelBtn: TTimer;
grdClient: TDBGridEh;
N51: TMenuItem;
N58: TMenuItem;
IdHTTP1: TIdHTTP;
miObjectProperty: TMenuItem;
actEdtDBGrid: TAction;
actFieldList: TAction;
actBrowseTable: TAction;
actSQLViews: TAction;
pmFooter: TPopupMenu;
N40: TMenuItem;
N57: TMenuItem;
N61: TMenuItem;
N62: TMenuItem;
tlb3: TToolBar;
btn4: TToolButton;
btn5: TToolButton;
btn6: TToolButton;
actHalfScreenSQLEditor: TAction;
actCommit: TAction;
actRollBack: TAction;
act1: TAction;
act2: TAction;
tlb4: TToolBar;
btn8: TToolButton;
btn7: TToolButton;
btn11: TToolButton;
pmOpenSQLFile: TPopupMenu;
N7: TMenuItem;
ds: TDataSource;
N9: TMenuItem;
N18: TMenuItem;
N20: TMenuItem;
N32: TMenuItem;
miToRight: TMenuItem;
miToSelectedTables: TMenuItem;
btnImport: TToolButton;
btnExport: TToolButton;
miExportSQL: TMenuItem;
btn2: TToolButton;
actNewPyFile: TAction;
btn13: TToolButton;
pnlTableFilter: TPanel;
pnl1: TPanel;
lbl1: TLabel;
btnSort: TSpeedButton;
btnSortDesc: TSpeedButton;
chklst: TCheckListBox;
upclckspltr1: TUPClickSplitter;
N1: TMenuItem;
actCopyTableCode: TAction;
pnlTips: TPanel;
N2: TMenuItem;
SQL1: TMenuItem;
actEsc: TAction;
N4: TMenuItem;
N5: TMenuItem;
tsTableStruct: TTabSheet;
grdTableStruct: TDBGridEh;
dsTableStrcut: TDataSource;
pmTableStruct: TPopupMenu;
miNULLable: TMenuItem;
pmSQLEditor: TPopupMenu;
N6: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N19: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
N28: TMenuItem;
N29: TMenuItem;
tsBuilder: TTabSheet;
SQL2: TMenuItem;
SQL3: TMenuItem;
pnl2: TPanel;
lbl2: TLabel;
edtHighLightField: TEdit;
N30: TMenuItem;
N33: TMenuItem;
N34: TMenuItem;
N37: TMenuItem;
N38: TMenuItem;
N41: TMenuItem;
N44: TMenuItem;
N45: TMenuItem;
N48: TMenuItem;
pmInsertTemplate: TPopupMenu;
N49: TMenuItem;
NULL1: TMenuItem;
N50: TMenuItem;
N54: TMenuItem;
N60: TMenuItem;
miInsertValue: TMenuItem;
miWordWrap: TMenuItem;
pmGrid: TPopupMenu;
N56: TMenuItem;
N59: TMenuItem;
N63: TMenuItem;
N64: TMenuItem;
N65: TMenuItem;
N66: TMenuItem;
N67: TMenuItem;
N68: TMenuItem;
miSQL4: TMenuItem;
procedure N26Click(Sender: TObject);
procedure actDataSetDeleteExecute(Sender: TObject);
procedure btnAddAllClick(Sender: TObject);
procedure btnAllClick(Sender: TObject);
procedure lstTableClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actFilterExecute(Sender: TObject);
procedure actReOpenExecute(Sender: TObject);
procedure miHelpClick(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure actProcedureExecute(Sender: TObject);
procedure actSQLDataExecute(Sender: TObject);
procedure actOneInsertExecute(Sender: TObject);
procedure actManyInsertExecute(Sender: TObject);
procedure actDeleteOneExecute(Sender: TObject);
procedure actOpenDictExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure actOptionExecute(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure N31Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure actShowBlobExecute(Sender: TObject);
procedure actBatchAddExecute(Sender: TObject);
procedure actOpenDBExecute(Sender: TObject);
procedure actToolsOptionExecute(Sender: TObject);
procedure actSelectAllExecute(Sender: TObject);
procedure actSaveSQLUpdate(Sender: TObject);
procedure cmdMinColWidthClick(Sender: TObject);
procedure mmoDblClick(Sender: TObject);
procedure miOpenApplicatioinDirClick(Sender: TObject);
procedure MenuItem4Click(Sender: TObject);
procedure grdClientTitleClick(Column: TColumnEh);
procedure actDeletSQLExecute(Sender: TObject);
procedure actLockDataStyleExecute(Sender: TObject);
procedure MenuItem6Click(Sender: TObject);
procedure grpListResize(Sender: TObject);
procedure actFilterFieldsExecute(Sender: TObject);
procedure edtFieldsEnter(Sender: TObject);
procedure edtFieldsExit(Sender: TObject);
procedure edtSelectEnter(Sender: TObject);
procedure edtSelectExit(Sender: TObject);
procedure edtSelectKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btnQuickInsertClick(Sender: TObject);
procedure BatchUpdate1Click(Sender: TObject);
procedure cmdCancelSelectedFieldsClick(Sender: TObject);
procedure cmdShowSelectedFieldsClick(Sender: TObject);
procedure cmdHideSelectedFieldsClick(Sender: TObject);
procedure cmdHideThisFieldClick(Sender: TObject);
procedure cmdShowAllFieldsClick(Sender: TObject);
procedure btnSortClick(Sender: TObject);
procedure btnSortDescClick(Sender: TObject);
procedure cmdCopyFieldsNameClick(Sender: TObject);
procedure Update1Click(Sender: TObject);
procedure grdClientDblClick(Sender: TObject);
procedure N35Click(Sender: TObject);
procedure actReOpenDBExecute(Sender: TObject);
procedure actAddFieldExecute(Sender: TObject);
procedure N39Click(Sender: TObject);
procedure miAboutClick(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure MenuItem3Click(Sender: TObject);
procedure grdClientMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure miOpenScriptDirClick(Sender: TObject);
procedure actShowTableExecute(Sender: TObject);
procedure actShowViewExecute(Sender: TObject);
procedure actShowProcedureExecute(Sender: TObject);
procedure N46Click(Sender: TObject);
procedure actExportHTMLExecute(Sender: TObject);
procedure actExportRTFExecute(Sender: TObject);
procedure actExportXLSExecute(Sender: TObject);
procedure actExportSVCExecute(Sender: TObject);
procedure actPrintExecute(Sender: TObject);
procedure actWordCorrectExecute(Sender: TObject);
procedure actSQLEditorOpenExecute(Sender: TObject);
procedure miExitClick(Sender: TObject);
procedure actRunSQLEditorWordExecute(Sender: TObject);
procedure actLstUpdate(Action: TBasicAction; var Handled: Boolean);
procedure actFindExecute(Sender: TObject);
procedure actFindNextExecute(Sender: TObject);
procedure actReplaceExecute(Sender: TObject);
procedure actPrevExecute(Sender: TObject);
procedure actReLoadScriptExecute(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure pmGrdPopup(Sender: TObject);
procedure actOptColWidthExecute(Sender: TObject);
procedure ApplicationEvents1Hint(Sender: TObject);
procedure Update2Click(Sender: TObject);
procedure N43Click(Sender: TObject);
procedure cmdTerminateClick(Sender: TObject);
procedure lmiEditSelectAllClick(Sender: TObject);
procedure N52Click(Sender: TObject);
procedure N53Click(Sender: TObject);
procedure N55Click(Sender: TObject);
procedure miHelpFileClick(Sender: TObject);
procedure edtFieldsKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btnDelRecordMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure tmrDelBtnTimer(Sender: TObject);
procedure btnDelRecordMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure edtSelectKeyPress(Sender: TObject; var Key: Char);
procedure N58Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
procedure miObjectPropertyClick(Sender: TObject);
procedure actedtSQLExecute(Sender: TObject);
procedure actFieldListExecute(Sender: TObject);
procedure actEdtDBGridExecute(Sender: TObject);
procedure actBrowseTableExecute(Sender: TObject);
procedure actSQLViewsExecute(Sender: TObject);
procedure actExecCmdExecute(Sender: TObject);
procedure N40Click(Sender: TObject);
procedure N57Click(Sender: TObject);
procedure N61Click(Sender: TObject);
procedure grdClientCellMouseClick(Grid: TCustomGridEh; Cell: TGridCoord;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure N62Click(Sender: TObject);
procedure chklstDblClick(Sender: TObject);
procedure btnAddOneClick(Sender: TObject);
procedure lstTableDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure lstChoiceTableDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure lstTableDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure btn4Click(Sender: TObject);
procedure actCommitExecute(Sender: TObject);
procedure actRollBackExecute(Sender: TObject);
procedure actSnapShortExecute(Sender: TObject);
procedure act1Execute(Sender: TObject);
procedure act2Execute(Sender: TObject);
procedure btn8Click(Sender: TObject);
procedure btn7Click(Sender: TObject);
procedure btn11Click(Sender: TObject);
procedure autofit1Click(Sender: TObject);
procedure chklstDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure chklstDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure N7Click(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N32Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure miToSelectedTablesClick(Sender: TObject);
procedure miToRightClick(Sender: TObject);
procedure btnImportClick(Sender: TObject);
procedure btnExportClick(Sender: TObject);
procedure miExportSQLClick(Sender: TObject);
procedure btnUploadClick(Sender: TObject);
procedure actRunExecute(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure actCopyTableCodeExecute(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure SQL1Click(Sender: TObject);
procedure actEscExecute(Sender: TObject);
procedure tsMessagesShow(Sender: TObject);
procedure grdTableStructDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
procedure N14Click(Sender: TObject);
procedure N24Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure N28Click(Sender: TObject);
procedure N29Click(Sender: TObject);
procedure SQL2Click(Sender: TObject);
procedure N30Click(Sender: TObject);
procedure N33Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure upclckspltr1Moved(Sender: TObject);
procedure N44Click(Sender: TObject);
procedure N45Click(Sender: TObject);
procedure N48Click(Sender: TObject);
procedure grdTableStructTitleClick(Column: TColumnEh);
procedure N49Click(Sender: TObject);
procedure NULL1Click(Sender: TObject);
procedure grdClientAdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
var Params: TColCellParamsEh; var Processed: Boolean);
procedure N54Click(Sender: TObject);
procedure N60Click(Sender: TObject);
procedure miInsertValueClick(Sender: TObject);
procedure miWordWrapClick(Sender: TObject);
procedure N56Click(Sender: TObject);
procedure N68Click(Sender: TObject);
procedure N59Click(Sender: TObject);
procedure actSQLEditorSaveExecute(Sender: TObject);
procedure miSQL4Click(Sender: TObject);
private
QueryBuilder: TMyPGQueryBuilder;
QryTableStruct: TMemTableEh;
CurSQLFile: string;
SynSQLSyn: TSynSQLSyn;
procedure DisplayTableStruct(TableCode: string);
function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: string; var Params: Variant): Variant;
function GetProp(Instance: TObject; ClassType: TClass; const PropName: string): Variant;
procedure SetProp(Instance: TObject; ClassType: TClass; const PropName: string; Value: Variant);
procedure SetStatusRecord;
procedure QueryBuilderDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
procedure QueryBuilderDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure QueryBuilderGetTableFields(const NameOfTable: string; var ADataSet: TDataSet; var AParams: TParams);
procedure QueryBuilderParserError(Sender: TObject; const ErrorMsg, Token: string; LineNo, LinePos: Integer);
// procedure QueryBuilderEnterProcParameter(Sender: TObject; SProcedure: TQBTable; ListItem: TQBListItem);
function FormatByQuotes(const Ident: string; Quote: boolean): string;
function GetParentMenu(FileName: string): TMenuItemEx;
function CreateParentMenu(FilePath: string): Boolean;
procedure AddMenuFromFileLIst(aMenu: TMenuItem; FileList: TStringList);
procedure WMDragFiles(var Msg: TMESSAGE); message WM_DragFiles;
procedure UpdateSQLEditorSize;
procedure PyPlugInsClick(Sender: TObject);
procedure SetupGridWidth(TableName: string; Grd: TDBGridEh);
procedure WriteGridWidth(TableName: string; Grd: TDBGridEh);
procedure ShowCaption;
function MakeCSVRecord: boolean;
procedure LoadPlugins;
procedure LoadSQLFavorites;
procedure PlugItemClick(Sender: TObject);
procedure pmOpenSQLFileClick(Sender: TObject);
procedure pmSaveSQLFileClick(Sender: TObject);
function MicroExpand(Params: string): string;
procedure SetGridEhColumnSort(ADOQuery: TZAbstractDataSet; Column: TColumnEh);
procedure AddLog(Msg: string); overload;
procedure AddLog(Msg: string; Value: array of const); overload;
procedure SetGridEhColumnSortMemTable(ADOQuery: TMemTableEh;
Column: TColumnEh);
protected
procedure CreateXPMenu;
public
fsScript1: TfsScript;
frClassesRTTI1: TfsClassesRTTI;
frGraphicsRTTI1: TfsGraphicsRTTI;
frFormsRTTI1: TfsFormsRTTI;
frDialogRTTI1: TfsDialogsRTTI;
fsDBRTTI1: TfsDBRTTI;
fsTree1: TfsTree;
fsPascal1: TfsPascal;
edtSQLViewer: TSynMemo;
pgcSQLEditor: TSQLEditorControl;
procedure FieldListFilter(Key: word);
procedure DisplayFieldList(Sort: Integer); //0,不排序,1正排序,2倒排序
procedure DisplayFieldListSQL;
procedure MyShortCutKeyExecute(Sender: TObject);
procedure LoadPascalPlugIns;
procedure myOnMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
end;
var
MainForm: TMainForm;
type
TCrackDBGrid = class(TDBGridEh)
end;
TCrackAction = class(TActionList)
end;
implementation
uses SQLUtils, UAppSet, UFrmSelectDB, UFrmOption,
UFrmUpdateRegular, UFrmBlobField, UFrmBatchAdd,
UFrmToolsOption, QExport4Dialog, QExport4,
UFrmFieldEditor, QImport3Wizard, QImport3,
UFrmAbout, UFrmWordCorrect,
UIntfApp, UStringRexp, UFoxmailMsgFrm, UFrmSplash,
UFrmCopyData, UFrmDict,
UFrmSQLFavoritesOption, Common, UFrmExpSQL, UFrmCheckConstrant;
{$R *.DFM}
procedure TMainForm.LoadPascalPlugIns;
var
FileList: TStringList;
begin
dmSQL.CurPyPlugPath := AppSet.AppDir + '\PlugIns\';
if DirectoryExists(AppSet.PlugInDir) then
dmSQL.CurPyPlugPath := AppSet.PlugInDir + '\';
FileList := TStringList.Create;
try
SearchFiles(FileList, dmSQL.CurPyPlugPath, '.pas');
AddMenuFromFileLIst(miPyScript, FileList);
finally
FileList.Free;
end;
end;
procedure TMainForm.LoadSQLFavorites;
var
StrList, SQLFiles: TStringList;
PlugItem, PlugItemFile: TMenuItemEx;
i, j: Integer;
begin
//加载编辑器收藏夹
for i := pmOpenSQLFile.Items.Count - 1 downto 0 do
if pmOpenSQLFile.Items[i].Tag = 0 then
pmOpenSQLFile.Items[i].Free;
StrList := TStringList.Create;
try
GetDirFiles(AppPath + 'SQL', StrList);
for i := StrList.Count - 1 downto 0 do
begin
PlugItem := TMenuItemEx.Create(self);
PlugItem.Caption := StrList[i];
PlugItem.FileName := AppPath + 'SQL\' + StrList[i];
if DirectoryExists(PlugItem.FileName) then
begin
SQLFiles := TStringList.Create;
if GetDirFiles(PlugItem.FileName, SQLFiles) > 0 then
begin
for j := 0 to SQLFiles.Count - 1 do
begin
PlugItemFile := TMenuItemEx.Create(PlugItem);
PlugItemFile.Caption := SQLFiles[j];
PlugItemFile.FileName := PlugItem.FileName + '\' + SQLFiles[j];
PlugItemFile.OnClick := pmOpenSQLFileClick;
PlugItem.Add(PlugItemFile);
end;
end;
SQLFiles.Free;
end;
PlugItem.OnClick := pmOpenSQLFileClick;
pmOpenSQLFile.Items.Insert(0, PlugItem);
end;
finally
StrList.Free;
end;
//打开保存下拉列表
// for i := pmSaveSQLFile.Items.Count - 1 downto 0 do
// if pmSaveSQLFile.Items[i].Tag = 0 then
// pmSaveSQLFile.Items[i].Free;
//
// ini := TIniFile.Create(AppSet.AppDir + '\Favorites.ini');
// StrList := TStringList.Create;
// try
// ini.ReadSection('SqlDir', StrList);
// for i := StrList.Count - 1 downto 0 do
// begin
// PlugItem := TMenuItemEx.Create(self);
// PlugItem.Caption := StrList[i];
// PlugItem.FileName := ini.ReadString('SqlDir', StrList[i], '');
// PlugItem.OnClick := pmSaveSQLFileClick;
// pmSaveSQLFile.Items.Insert(0, PlugItem);
// end;
// finally
// StrList.Free;
// ini.Free;
// end;
end;
procedure GetMenuCaption(aMenu: TMenuItemEx);
var
Line, MenuCaption, MenuShortCut, MenuHint: string;
S: TStringList;
i: integer;
begin
S := TStringList.Create;
S.LoadFromFile(aMenu.FileName);
if s.Count < 5 then
begin
S.Free;
Exit;
end;
MenuCaption := 'NoName'; MenuShortCut := '';
for i := 0 to 4 do
begin
Line := s.Strings[i];
if pos('//MENUNAME:', UpperCase(Line)) > 0 then
MenuCaption := Trim(copy(Line, Pos(':', Line) + 1, 100));
if pos('//MENUHINT:', UpperCase(Line)) > 0 then
MenuHint := Trim(copy(Line, Pos(':', Line) + 1, 100));
if pos('//MENUSHORTCUT:', UpperCase(Line)) > 0 then
MenuShortCut := Trim(copy(Line, Pos(':', Line) + 1, 100));
end;
aMenu.Caption := MenuCaption;
aMenu.Hint := MenuHint;
if MenuShortCut <> '' then
aMenu.ShortCut := TextToShortCut(MenuShortCut);
S.Free;
end;
function ParentPath(ChildPath: string): string;
var
i: integer;
begin
for i := Length(ChildPath) - 1 downto 1 do
begin
if ChildPath[i] = '\' then
break;
end;
result := copy(ChildPath, 1, i);
end;
procedure TMainForm.CreateXPMenu;
begin
// 创建XPMenu;
with TXPMenu.Create(Self) do
Active := True;
end;
function TMainForm.GetParentMenu(FileName: string): TMenuItemEx;
var
i: Integer;
begin
Result := nil;
for i := 0 to miPyScript.Count - 1 do
begin
if (miPyScript.Items[i] is TMenuItemEx) and (TMenuItemEx(miPyScript.Items[i]).FileName = ExtractFilePath(FileName)) then
begin
Result := TMenuItemEx(miPyScript.Items[i]);
Exit;
end;
end;
end;
function GetShortFilePath(FilePath: string): string;
var
i: integer;
begin
Result := '';
for i := Length(FilePath) - 1 downto 1 do
begin
if FilePath[i] = '\' then
begin
Result := copy(FilePath, i + 1, length(FilePath) - i - 1);
Exit;
end;
end;
end;
function TMainForm.CreateParentMenu(FilePath: string): Boolean;
var
i: integer;
aMenu: TMenuItemEx;
FoundMenu: boolean;
begin
Result := False;
FoundMenu := False;
for i := 0 to miPyScript.Count - 1 do
begin
if (miPyScript.Items[i] is TMenuItemEx) and (TMenuItemEx(miPyScript.Items[i]).FileName = FilePath) then
begin
FoundMenu := True;
Break;
end;
end;
if not FoundMenu then
begin
aMenu := TMenuItemEx.Create(Self);
aMenu.Caption := GetShortFilePath(FilePath);
aMenu.FileName := FilePath;
aMenu.MenuIndex := 0;
miPyScript.Add(aMenu);
Exit;
end;
end;
procedure TMainForm.AddMenuFromFileLIst(aMenu: TMenuItem; FileList: TStringList);
var
Menu: TMenuItemEx; I: integer;
begin
for I := 0 to FileList.Count - 1 do
begin
if ExtractFilePath(FileList.Strings[I]) = UpperCase(dmSQL.CurPyPlugPath) then
begin
Menu := TMenuItemEx.Create(Self);
Menu.FileName := FileList.Strings[I];
Menu.OnClick := PyPlugInsClick;
Menu.ImageIndex := 47;
GetMenuCaption(Menu);
Menu.Tag := 10000;
aMenu.Add(Menu);
end;
if ParentPath(ExtractFilePath(FileList.Strings[I])) = UpperCase(dmSQL.CurPyPlugPath) then
begin
CreateParentMenu(ExtractFilePath(FileList.Strings[I]));
Menu := TMenuItemEx.Create(Self);
Menu.FileName := FileList.Strings[I];
Menu.OnClick := PyPlugInsClick;
Menu.ImageIndex := 47;
GetMenuCaption(Menu);
Menu.Tag := 10000;
GetParentMenu(Menu.FileName).Add(Menu);
end;
end;
end;
procedure TMainForm.SetGridEhColumnSort(ADOQuery: TZAbstractDataSet;
Column: TColumnEh);
var
bk: Tbookmark;
begin
bk := ADOQuery.GetBookmark;
try
case Column.Title.SortMarker of //列排序
smNoneEh:
begin
Column.Title.SortMarker := smDownEh;
ADOQuery.SortedFields := Column.FieldName + ' DESC';
end;
smDownEh:
begin
Column.Title.SortMarker := smUpEh;
ADOQuery.SortedFields := Column.FieldName + ' ASC';
end;
smUpEh:
begin
Column.Title.SortMarker := smDownEh;
ADOQuery.SortedFields := Column.FieldName + ' DESC';
end;
end;
ADOQuery.GotoBookmark(bk);
finally
ADOQuery.FreeBookmark(bk);
end;
end;
procedure TMainForm.SetStatusRecord;
begin
statusbar.Panels[6].Text := Format('%d', [iif(dmSQL.qryGrid.Active, dmsql.qryGrid.RecordCount, 0)]);
end;
{双击可选择列表,则将选择项移到右边列表中}
procedure TMainForm.lstTableDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
inherited;
// if (Source is TListBox) then
// begin
// for i := 0 to (Source as TListBox).Count - 1 do
// if (Source as TListBox).Selected[i] then
// begin
// (Sender as TListBox).Items.Add((Source as TListBox).Items.Strings[i]);
// end;
// end;
end;
procedure TMainForm.lstTableDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
inherited;
// if (Source is TListBox) and ((Source as TListBox).Name = 'lstChoiceTable') then
// Accept := True;
end;
procedure TMainForm.lstChoiceTableDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
if (Source is TListBox) and ((Source as TListBox).Name = 'lstTable') then
Accept := True;
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-22
Description:把基本对象列表中的对象移到选择列表中.
-----------------------------------------------------------------------------}
procedure TMainForm.btnAddAllClick(Sender: TObject);
begin
// //业务类处理
// if lstTable.Items.Count < 0 then
// Exit;
// dmSQL.MoveAllBase2Selected;
// dmSQL.RefreshObject(lstTable.Items, lstChoiceTable.Items);
end;
procedure TMainForm.btnAddOneClick(Sender: TObject);
begin
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-22
Description: 从选择的列表中把对象移到基本列表中.
-----------------------------------------------------------------------------}
procedure TMainForm.btnAllClick(Sender: TObject);
begin
// dmSQL.MoveAllSelected2Base;
// dmSQL.RefreshObject(lstTable.Items, lstChoiceTable.Items);
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-22
Description: 单击基本列表时的动作
-----------------------------------------------------------------------------}
procedure TMainForm.lstTableClick(Sender: TObject);
var
i: integer;
Qry: TDataSetEx;
s, sResult, sParam: string;
begin
if lstTable.ItemIndex < 0 then
Exit;
BaseObjects.ItemIndex := lstTable.ItemIndex;
CurEnv.TableName := BaseObjects.Items[lstTable.ItemIndex].TableName;
CurEnv.TableCode := BaseObjects.Items[lstTable.ItemIndex].TableCode;
dmSQL.QryGrid.Close;
dmSQL.QryGrid.SortedFields := '';
dmSQL.QryGrid.Filtered := False;
dmSQL.QryGrid.Filter := '';
dmSQL.QryGrid.Params.Clear;
dmSQL.QryGrid.ParamCheck := False;
if dmSQL.CurDataStatus = stProcedure then
begin
Qry := dmSQL.GetDataSet(Format('SELECT oidvectortypes(proargtypes) FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid) WHERE proname=''%s''', [CurEnv.TableCode]));
if Qry = nil then
begin
WarnMessage('查询函数结构出错');
Exit;
end;
try
sParam := Qry.Fields[0].AsString;
sParam := StringReplace(sParam, 'character varying', 'varchar', [rfReplaceAll, rfIgnoreCase]);
Qry.Free;
sResult := Format('CREATE OR REPLACE FUNCTION %s (%s) AS ', [CurEnv.TableCode, sParam]);
Qry := dmSQL.GetDataset(Format('select prosrc as name from pg_proc where proname=''%s''', [CurEnv.TableCode]));
sResult := sResult + #13#10 + '$$';
while not Qry.Eof do
begin
sResult := sResult + Qry.Fields[0].AsString;
Qry.Next;
end;
s := dmSQL.GetDataString(Format('SELECT B.lanname FROM pg_proc A,pg_language B WHERE A.prolang=B.oid AND A.proname=''%s''', [CurEnv.TableCode]));
sResult := sResult + '$$' + #13#10 + 'LANGUAGE ' + s + ';';
finally
Qry.Free;
end;
edtSQLViewer.Lines.Text := sResult;
edtSQLViewer.Show;
Exit;
end;
dmSQL.QryGrid.SQL.Text := Format('SELECT * FROM %s', [CurEnv.TableCode]);
if (AppSet.TopLines > 0) and (dmSQL.CurDbType = dbSQLServer2000) then
dmSQL.QryGrid.SQL.Text := Format('SELECT top %d * FROM %s', [AppSet.TopLines, CurEnv.TableCode]);
if (AppSet.TopLines > 0) and (dmSQL.CurDbType = dbPostgreSQL) then
dmSQL.QryGrid.SQL.Text := dmSQL.QryGrid.SQL.Text + Format(' LIMIT %d', [AppSet.TopLines]);
dmSQL.QryGrid.Open;
ds.DataSet := dmSQL.QryGrid;
dmSQL.TransDBGrid(CurEnv.TableCode, grdClient);
DisplayFieldList(0);
FieldListFilter(0);
StatusBar.Panels[1].Text := CurEnv.TableName;
StatusBar.Panels[3].Text := CurEnv.TableCode;
if dmsql.qryGrid.Active then
begin
statusbar.Panels[6].Text := inttostr(dmsql.qryGrid.recordcount);
grdClient.AutoFitColWidths := TMenuItem(autofit1).Checked; // 原来的方式, 是根据字段定义的宽度进行调整, 不实用.改为根据数据宽度进行调整.
if TMenuItem(autofit1).Checked then
begin
for i := 0 to grdClient.Columns.Count - 1 do
grdClient.Columns[i].OptimizeWidth;
end;
if actLockDataStyle.Checked then
SetupGridWidth(CurEnv.TableCode, grdClient);
if cmdMinColWidth.Checked then
cmdMinColWidth.OnClick(nil);
DisplayTableStruct(CurEnv.TableCode);
end;
end;
procedure TMainForm.UpdateSQLEditorSize;
begin
AppSet.Save;
end;
procedure TMainForm.FieldListFilter(Key: word);
var
i: integer;
Str: string;
bExpr: Boolean;
begin
bExpr := false;
if not dmSQL.QryGrid.Active then
Exit;
Str := Trim(edtFields.Text);
chklst.Items.Clear;
if Str = '' then
begin
for i := 0 to AllField.Count - 1 do
begin
if AllField.Items[i].TableName <> '' then
chklst.Items.Add(AllField.Items[i].TableCode + dmSQL.PreFix[1] + AllField.Items[i].TableName + dmSQL.PreFix[2])
else
chklst.Items.Add(AllField.Items[i].TableCode);
end;
Exit;
end;
chklst.Items.Clear;
Expr.ModifierI := True;
Expr.Expression := Str;
for i := 0 to AllField.Count - 1 do
begin
try
bExpr := Expr.Exec(AllField.Items[i].TableCode);
except
end;
if bExpr then
begin
if AllField.Items[i].TableName <> '' then
chklst.Items.Add(AllField.Items[i].TableCode + dmSQL.PreFix[1] + AllField.Items[i].TableName + dmSQL.PreFix[2])
else
chklst.Items.Add(AllField.Items[i].TableCode);
if QryTableStruct.Active and (pgcDataView.ActivePage = tsTableStruct) then
QryTableStruct.Locate('column_name', AllField.Items[i].TableCode, [loCaseInsensitive, loPartialKey]);
end;
end;
if Key = VK_RETURN then
begin
if chklst.Items.Count > 0 then
begin
i := Pos(dmSQL.PreFix[1], chklst.Items.Strings[0]);
if i > 0 then
Str := Copy(chklst.Items.Strings[0], 1, i - 1)
else
Str := chklst.Items.Strings[0];
dmSQL.Qrygrid.FieldByName(Str).FocusControl;
end;
end;
end;
function TMainForm.FormatByQuotes(const Ident: string; Quote: boolean): string;
begin
{ Result := Ident;
if Quote then
begin
if QueryBuilder.AlterQuotes then
Result := Format('"%s"', [Ident])
else
Result := Format('[%s]', [Ident]);
end; }
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
ShortDateFormat := 'YYYY-MM-DD';
ShortTimeFormat := 'HH:mm:ss';
LongTimeFormat := 'HH:mm:ss';
TimeAMString := '';
TimePMString := '';
DateSeparator := '-';
TimeSeparator := ':';
inherited;
dmSQL.FGrid := grdClient;
QueryBuilder := TMyPGQueryBuilder.Create(Self);
QueryBuilder.VisibleTabs := [];
QueryBuilder.Parent := tsBuilder;
QueryBuilder.OnDragOver := QueryBuilderDragOver;
QueryBuilder.OnDragDrop := QueryBuilderDragDrop;
QueryBuilder.OnGetTableFields := QueryBuilderGetTableFields;
//
QryTableStruct := TMemTableEh.Create(Self);
QryTableStruct.FieldDefs.Clear;
QryTableStruct.FieldDefs.Add('column_name', ftString, 20);
QryTableStruct.FieldDefs.Add('column_displayname', ftString, 20);
QryTableStruct.FieldDefs.Add('column_default', ftString, 25);
QryTableStruct.FieldDefs.Add('is_nullable', ftString, 20);
QryTableStruct.FieldDefs.Add('udt_name', ftString, 20);
QryTableStruct.FieldDefs.Add('data_type', ftString, 20);
QryTableStruct.FieldDefs.Add('character_maximum_length', ftInteger);
QryTableStruct.FieldDefs.Add('numeric_precision', ftInteger);
QryTableStruct.FieldDefs.Add('numeric_precision_radix', ftInteger);
QryTableStruct.FieldDefs.Add('numeric_scale', ftInteger);
QryTableStruct.FieldDefs.Add('datetime_precision', ftInteger);
QryTableStruct.CreateDataSet;
dsTableStrcut.DataSet := QryTableStruct;
fsScript1 := TfsScript.Create(Self);
fsScript1.SyntaxType := 'PascalScript';
frClassesRTTI1 := TfsClassesRTTI.Create(Self);
frGraphicsRTTI1 := TfsGraphicsRTTI.Create(Self);
frFormsRTTI1 := TfsFormsRTTI.Create(Self);
fsDBRTTI1 := TfsDBRTTI.Create(Self);
frDialogRTTI1 := TfsDialogsRTTI.Create(Self);
// fsTree1 := TfsTree.Create(tsMessages);
// fsTree1.Parent := tsMessages;
// fsTree1.Align := alRight;
fsPascal1 := TfsPascal.Create(Self);
//增加导出对象和类对全局脚本单元
fsGlobalUnit.AddForm(MainForm);
fsGlobalUnit.AddForm(dmSQL);
fsGlobalUnit.AddClass(TBaseTableItem, 'TCollectionItem');
fsGlobalUnit.AddClass(TBaseTable, 'TCollection').AddDefaultProperty('Items', 'Integer', 'TBaseTableItem', CallMethod, True);
fsGlobalUnit.AddClass(TDataSetEx, 'TDataSet');
fsGlobalUnit.AddObject('BaseObjects', BaseObjects);
fsGlobalUnit.AddMethod('procedure Print(Msg:String);', CallMethod, 'App', '输出信息到消息页');
fsGlobalUnit.AddMethod('procedure ShowInfo(const Info: string);', CallMethod, 'App', '显示MSN类型的信息提示');
fsGlobalUnit.AddMethod('procedure ShowWarning(const Info: string);', CallMethod, 'App', '显示MSN类型的警告提示');
fsGlobalUnit.AddMethod('procedure ShowError(const Info: string);', CallMethod, 'App', '显示MSN类型的错误提示');
fsGlobalUnit.AddMethod('procedure YesNoMessage(const Info: string);', CallMethod, 'App', '显示是否类型对话框');
fsGlobalUnit.AddMethod('procedure InfoMessage(const Info: string);', CallMethod, 'App', '显示提示类型对话框');
fsGlobalUnit.AddMethod('procedure StopMessage(const Info: string);', CallMethod, 'App', '显示显示错误类型对话框');
fsGlobalUnit.AddMethod('procedure WarnMessage(const Info: string);', CallMethod, 'App', '显示警告类型对话框');
fsGlobalUnit.AddMethod('procedure SureMessage(const Info: string);', CallMethod, 'App', '显示确定取消类型对话框');
fsGlobalUnit.AddMethod('procedure ShowLogTab;', CallMethod, 'App', '显示Log消息页');
fsGlobalUnit.AddMethod('procedure ShowDataTab;', CallMethod, 'App', '显示Data消息页');
fsGlobalUnit.AddMethod('function FileExists(const FileName: string):Boolean;', CallMethod, 'App', '文件是否存在');
fsGlobalUnit.AddMethod('function RandomInt(maxInt:Integer):Integer;', CallMethod, 'App', '文件是否存在');
fsGlobalUnit.AddMethod('function GetDataInteger(SQL: string): Integer;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function GetDictValue(TableCode,FieldCode:string):String;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function SetDictValue(TableCode,FieldCode,DispCode:string):Boolean;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function GetDataString(SQL: string): String;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function ExecSQL(SQL: string): Boolean;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function GetDataSet(SQL: string): TDataSet;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddMethod('function GetHzPy(const AHzStr: string): string;', CallMethod, 'dmSQL', '');
fsGlobalUnit.AddClass(TClipboard, 'TPersistent').AddProperty('AsText', 'string', GetProp, SetProp);
fsGlobalUnit.AddObject('Clipboard', Clipboard);
fsScript1.Parent := fsGlobalUnit;
edtSQLViewer := TSynMemo.Create(Self);
edtSQLViewer.Color := $00EFEFEF;
SynSQLSyn := TSynSQLSyn.Create(Self);
edtSQLViewer.Highlighter := SynSQLSyn;
SynSQLSyn.SQLDialect := sqlMSSQL2K;
SynSQLSyn.Enabled := True;
edtSQLViewer.Parent := tsSQLViewer;
edtSQLViewer.Align := alClient;
Color := appset.FormColor;
lstTable.Clear;
//对DBGrid进行初始化
grdClient.Color := AppSet.DbGrdEvenColor;
grdClient.OddRowColor := AppSet.DbGrdOddColor;
grdTableStruct.Color := AppSet.DbGrdEvenColor;
grdTableStruct.OddRowColor := AppSet.DbGrdOddColor;
LoadPlugIns;
LoadPascalPlugIns;
// for i := 0 to AllTable.Count - 1 do
// dmSQL.Complete.AutoCompleteList.Add(AllTable.Items[i].TableCode);
actSQLEditorChangeSize.ShortCut := ShortCut(VK_LEFT, [ssAlt, ssCtrl]);
pgcSQLEditor := TSQLEditorControl.Create(Self);
pgcSQLEditor.Parent := grpList;
pgcSQLEditor.Align := alClient;
pgcSQLEditor.ShowEditor;
pgcSQLEditor.edtSQLViewer.PopupMenu := pmSQLEditor;
pgcSQLEditor.Images := dmSQL.ilToolBar;
TCrackDBGrid(grdClient).OnMouseWheel := myOnMouseWheel;
end;
procedure TMainForm.actFieldListExecute(Sender: TObject);
begin
chklst.SetFocus;
end;
procedure TMainForm.actFilterExecute(Sender: TObject);
begin
edtSelect.SetFocus;
edtSelect.SelectAll;
end;
procedure TMainForm.actReOpenExecute(Sender: TObject);
var
i: Integer;
begin
i := dmSQL.qryGrid.RecNo;
dmSQL.qryGrid.Close;
dmSQL.qryGrid.Open;
dmSQL.qryGrid.RecNo := i;
end;
function TMainForm.MakeCSVRecord: boolean;
var //生成CSV格式记录
i: Integer;
s: string;
begin
s := '';
for i := 0 to grdClient.FieldCount - 1 do
begin
s := s + ',' + Trim(grdClient.DataSource.DataSet.Fields[i].AsString);
end;
Delete(s, 1, 1);
Clipboard.AsText := s;
end;
procedure TMainForm.miExportSQLClick(Sender: TObject);
var
s, InsertFmt: string;
i: Integer;
sl: TStringList;
begin
i := 0;
dlgSave.DefaultExt := '.sql';
dlgSave.Filter := 'SQL文件|.sql';
if not dlgSave.Execute then
Exit;
InsertFmt := dmSQL.CreateTableModal(CurEnv.TableCode, dmSQL.QryGrid);
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
sl := TStringList.Create;
try
sl.Add(Format('--%d', [dmSQL.QryGrid.RecordCount]));
if not AppSet.AddTruncate then
s := '--';
s := s + 'DELETE FROM ' + CurEnv.TableCode;
if AppSet.AddSemicolon then
s := s + ';';
sl.Add(s);
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.First;
dmSQL.qryGrid.DisableControls;
while not dmSQL.qryGrid.Eof do
begin
sl.Add(BuildSqlFromFmt(InsertFmt, dmSQL.qryGrid));
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.Next;
end;
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.EnableControls;
try
sl.SaveToFile(dlgSave.FileName);
except
ShowWarning('保存文件出错');
Exit;
end;
ShowInfo('保存文件成功');
finally
sl.Free;
end;
end;
procedure TMainForm.miHelpClick(Sender: TObject);
begin
end;
//var
// BLoader: TLoader;
//begin
// BLoader := TLoader.Create('DictEdit.dll');
// if BLoader.ModelServiceInts.ExecuteCmd(1001, 0, 0) = S_OK then
// begin
//
// end;
procedure TMainForm.N3Click(Sender: TObject);
var
sFieldName: string;
begin
sFieldName := grdClient.SelectedField.FieldName;
dmSQL.qryGrid.Filter := sFieldName + '=' + quotedstr(grdClient.SelectedField.AsString);
dmSQL.qryGrid.Filtered := True;
end;
procedure TMainForm.actProcedureExecute(Sender: TObject);
var
sList: TStringList;
begin
dlgSave.DefaultExt := '.sql';
dlgSave.Filter := 'SQL文件|.sql';
if not dlgSave.Execute then Exit;
sList := TStringList.Create;
try
sList.SaveToFile(dlgSave.FileName + '.sql');
sList.Free;
except
Application.MessageBox('指定路径生成文件失败!', '系统信息', MB_OK + MB_ICONSTOP);
sList.Free;
Abort;
end;
Application.MessageBox('脚本文件已经成功生成!', '系统信息', MB_OK + MB_ICONINFORMATION);
end;
procedure TMainForm.actSQLDataExecute(Sender: TObject);
var
sList: TStringList;
begin
dlgSave.DefaultExt := '.sql';
dlgSave.Filter := 'SQL文件|.sql';
if not dlgSave.Execute then Exit;
sList := TStringList.Create;
if FileExists(dlgSave.FileName + '.sql') then
if Application.MessageBox('文件已存在,您确定要覆盖吗?', '系统信息', MB_YESNO + MB_ICONWARNING) = IDNO then
exit;
try
sList.SaveToFile(dlgSave.FileName + '.sql');
sList.Free;
except
Application.MessageBox('指定路径生成文件失败!', '系统信息', MB_OK + MB_ICONSTOP);
sList.Free;
Abort;
end;
Application.MessageBox('脚本文件已经成功生成!', '系统信息', MB_OK + MB_ICONINFORMATION);
end;
procedure TMainForm.actOneInsertExecute(Sender: TObject);
var
s, InsertFmt: string;
begin
if grdClient.DataSource.DataSet = nil then
Exit;
if not dmSQL.QryGrid.Active then
Exit;
InsertFmt := dmSQL.CreateTableModal(CurEnv.TableCode, dmSQL.QryGrid);
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
s := BuildSqlFromFmt(InsertFmt, grdClient.DataSource.DataSet);
if AppSet.LinesForCommit > 0 then
s := s + #13#10 + AppSet.CommitCmd;
Clipboard.AsText := s;
ShowInfo('已复制单条Insert语句到剪切板');
end;
procedure TMainForm.actManyInsertExecute(Sender: TObject);
var
s, InsertFmt: string;
sl: TStringList;
i: Integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
InsertFmt := dmSQL.CreateTableModal(CurEnv.TableCode, dmSQL.QryGrid);
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
sl := TStringList.Create;
try
dmSQL.qryGrid.First;
i := 0;
sl.Add(Format('--%d', [dmSQL.QryGrid.RecordCount]));
if not AppSet.AddTruncate then
s := '--';
s := s + 'DELETE FROM ' + CurEnv.TableCode;
if AppSet.AddSemicolon then
s := s + ';';
sl.Add(s);
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
while not dmSQL.qryGrid.Eof do
begin
sl.Add(BuildSqlFromFmt(InsertFmt, dmSQL.qryGrid));
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.Next;
end;
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
Clipboard.AsText := sl.Text;
ShowInfo('已复制数据集Insert语句到剪切板');
finally
sl.Free;
end;
end;
procedure TMainForm.actDataSetDeleteExecute(Sender: TObject);
var
s, ALLSQL, InsertFmt: string;
i: integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
ALLSQL := '';
dmsql.qryGrid.First;
while not dmsql.qryGrid.Eof do
begin
s := '';
InsertFmt := 'DELETE FROM ' + BaseObjects.Items[BaseObjects.ItemIndex].TableCode + ' WHERE ';
for i := 0 to dmsql.qryGrid.FieldCount - 1 do
if dmsql.qryGrid.Fields[i].DataType in [ftFloat, ftSmallint, ftInteger, ftCurrency] then
s := s + dmsql.qryGrid.Fields[i].FieldName + '=' + dmsql.qryGrid.fields[i].AsString + ' AND '
else
s := s + dmsql.qryGrid.Fields[i].FieldName + '=''' + dmsql.qryGrid.fields[i].AsString + ''' AND ';
s := InsertFmt + s;
Delete(s, Length(s) - 4, 4);
if AppSet.AddSemicolon then
s := s + ';';
allsql := allsql + #13 + #10 + s;
dmsql.qryGrid.Next;
end;
Clipboard.AsText := ALLSQL;
end;
procedure TMainForm.actDeleteOneExecute(Sender: TObject);
begin
if grdClient.DataSource.DataSet = nil then
Exit;
if not grdClient.DataSource.DataSet.IsEmpty then
grdClient.DataSource.DataSet.Delete;
end;
procedure TMainForm.actOpenDictExecute(Sender: TObject);
var
UserName: array[0..$400] of Char;
s: string;
begin
Assert(dmSQL.CurCOnItem <> nil, 'DBInfo对象为nil,请检查');
FillChar(UserName, Sizeof(UserName), #0);
GetEnvironmentVariable('Editor', UserName, $400);
s := UserName;
if s <> '' then
winexec(PAnsiChar(s + ' "' + dmSQL.CurCOnItem.CfgFile + '"'), SW_SHOW)
else
winexec(PAnsiChar('Notepad.exe ' + dmSQL.CurCOnItem.CfgFile), SW_SHOW)
end;
procedure TMainForm.FormShow(Sender: TObject);
var
iLstWidth: Integer;
begin
inherited;
// gEditors := TEditors.Create(pgcSQLEditor);
miWordWrap.Checked := AppSet.GetConfig('MainForm', 'SQLEditorWordWrap', 'Y') = 'Y';
pgcSQLEditor.edtSQLViewer.WordWrap := miWordWrap.Checked;
iLstWidth := StrToInt(AppSet.GetConfig('Main', 'BaseListWidth', '160'));
if iLstWidth < 100 then
iLstWidth := 100;
if iLstWidth > 800 then
iLstWidth := 100;
pnlLeft.Width := iLstWidth;
//加载主菜单功能
WindowState := TWindowState(AppSet.ShowWindowState);
dmSQL.CurDataStatus := stTable;
dmSQL.RefreshObject(lstTable.Items);
LoadPlugins;
LoadSQLFavorites;
ShowCaption;
grdClient.DrawMemoText := AppSet.ShowMemoInGrid;
UpdateSQLEditorSize;
pgcDataView.ActivePageIndex := 0;
CreateXPMenu;
cmdMinColWidthClick(nil);
edtSelect.SetFocus;
grdClient.Font := AppSet.GridFont;
grdClient.TitleFont := AppSet.GridFont;
end;
procedure TMainForm.actOptionExecute(Sender: TObject);
begin
with TFrmOption.Create(Self) do
begin
ShowModal;
Free;
end;
end;
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then
begin
if appset.CloseApp = 1 then
begin
if dmSQL.qryGrid.State <> dsBrowse then
begin
dmSQL.qryGrid.Cancel;
Key := #0;
Exit;
end;
if Application.MessageBox('Exit?', 'Question', MB_YESNO) = IDYES then
Close;
end;
if appset.CloseApp = 2 then
if dmSQL.qryGrid.State <> dsBrowse then
dmSQL.qryGrid.Cancel
else
Close;
end;
end;
procedure TMainForm.N31Click(Sender: TObject);
var
i, j: Integer;
Frm: TFrmUpdateRegular;
S, PercentList: TStringList;
bRandom: TUpdateType;
bResult: Boolean;
begin
S := TStringList.Create;
Frm := TFrmUpdateRegular.Create(Self);
frm.ShowModal;
bResult := frm.ModalResult = mrOK;
s.Text := frm.mmoMore.Text;
bRandom := frm.UpdateType;
frm.Free;
if not bResult then
Exit;
if s.Count < 2 then
begin
while not dmSQL.qryGrid.Eof do
begin
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).AsString := S.Text;
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
end;
Exit;
end;
if bRandom = utsequeen then
begin
dmSQL.qryGrid.First;
i := 0;
while not dmSQL.qryGrid.Eof do
begin
if i < s.Count - 1 then
begin
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).AsString := s.Names[i];
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
Inc(i);
end else
i := 0;
end;
end;
if bRandom = utrandom then
begin
Randomize;
dmSQL.qryGrid.First;
while not dmSQL.qryGrid.Eof do
begin
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).AsString := s.Names[Random(s.Count)];
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
end;
end;
//按百分比进行乱序更新,目前算法:
{1产生一个新列表,把模板中的按百分比把值加到这个列表中,新列表的总行数为100,
2进行乱序处理,把这100行数据进行100次乱序
3依次把新列表中的数更新到数据列中.
}
if bRandom = utpercent then
begin
Randomize;
PercentList := TStringList.Create;
for i := 0 to s.Count - 1 do
begin
for j := 1 to StrToInt(s.ValueFromIndex[i]) do
begin
PercentList.Add(s.Names[i])
end;
end;
//乱序
for i := 1 to 100 do
PercentList.Exchange(Random(100), Random(100));
dmSQL.qryGrid.First;
i := 0;
while not dmSQL.qryGrid.Eof do
begin
if i > 99 then i := 0 else
begin
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).AsString := PercentList.Strings[i];
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
Inc(i);
end;
end;
PercentList.Free;
end;
S.Free;
end;
procedure TMainForm.N32Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to chklst.Count - 1 do
chklst.Checked[i] := False;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
pgcSQLEditor.Free;
aToolsList.Free;
inherited;
end;
procedure TMainForm.DisplayFieldList(Sort: Integer);
var
i: Integer;
sTableCode, sFieldName, sTitle: string;
StrList: TStringList;
JSONField: TlkJSONobject;
begin
if AllField.Count > 0 then
AllField.Clear;
if (lstTable.ItemIndex < 0) and (CurEnv.TableCode = '') then
Exit;
if not dmSQL.QryGrid.Active then
Exit;
sTableCode := CurEnv.TableCode;
//LHQ 2009-6-22 在SQL编辑器中,选中一个字表字符串,要在字段列表中显示当前表才对.
// sTableCode := BaseObjects.Items[lstTable.ItemIndex].TableCode;
StrList := TStringList.Create;
try
dmSQL.Con.GetColumnNames(sTableCode, '', StrList);
if Sort = 1 then //正向排序
StrList.Sort;
if Sort = 2 then //反向排序
begin
for i := 0 to StrList.Count - 1 do
StrList.Move(StrList.Count - 1, i);
end;
for i := 0 to StrList.Count - 1 do //首先加到AllField对象中.
begin
sFieldName := StrList.Strings[i];
sTitle := '';
with AllField.Add do
begin
JSONField := dmSQL.GetDictFieldJson(sTableCode, sFieldName);
if JSONField <> nil then
TableName := JSONField.getString('caption');
TableCode := sFieldName;
end;
end;
finally
StrList.Free;
end;
chklst.Clear; //然后再根据对象刷新界面.
for i := 0 to AllField.Count - 1 do
begin
if AllField.Items[i].TableName <> '' then
chklst.Items.Add(AllField.Items[i].TableCode + dmSQL.PreFix[1] + AllField.Items[i].TableName + dmSQL.PreFix[2])
else
chklst.Items.Add(AllField.Items[i].TableCode);
end;
StatusBar.Panels[8].Text := Format('%6d', [chklst.Items.Count]); //显示当前查询的字段数量
end;
procedure TMainForm.DisplayFieldListSQL;
var
i: Integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
if AllField.Count > 0 then
AllField.Clear;
chklst.Clear;
for i := 0 to dmSQL.QryGrid.FieldCount - 1 do
begin
with AllField.Add do
begin
TableName := '';
TableCode := dmSQL.QryGrid.Fields[i].FieldName;
chklst.Items.Add(TableCode);
end;
end;
StatusBar.Panels[8].Text := Format('%6d', [chklst.Items.Count]); //显示当前查询的字段数量
end;
procedure TMainForm.actShowBlobExecute(Sender: TObject);
var
sFiledName: string;
Frm: TFrmBlobField;
Stream: TMemoryStream;
aByte: array[0..4] of Byte;
jpg: TJPEGImage;
begin
sFiledName := grdClient.SelectedField.FieldName;
if dmSQL.qryGrid.FieldByName(sFiledName).DataType in [ftBlob] then
begin
Stream := TMemoryStream.Create;
TBlobField(dmSQL.qryGrid.FieldByName(sFiledName)).SaveToStream(Stream);
Stream.Position := 0;
Stream.read(aByte, 5);
Frm := TFrmBlobField.Create(Self);
if (aByte[0] = $42) and (aByte[1] = $4D) and (aByte[2] = $D8) and (aByte[3] = $41) and (aByte[4] = $00) then
begin
Frm.PictureFormat := 'BMP';
frm.img.Picture.Bitmap.LoadFromStream(Stream);
frm.tsImage.Show;
end;
if (aByte[0] = $FF) and (aByte[1] = $D8) and (aByte[2] = $FF) and (aByte[3] = $E0) and (aByte[4] = $00) then
begin //JPEG File
Stream.Position := 0;
jpg := TJPEGImage.Create;
jpg.LoadFromStream(Stream);
frm.img.Picture.Assign(jpg);
jpg.Free;
Frm.PictureFormat := 'JPEG';
frm.tsImage.Show;
end;
frm.Stream := Stream;
if frm.ShowModal = mrOK then
begin
dmSQL.qryGrid.Edit;
TBlobField(dmSQL.qryGrid.FieldByName(sFiledName)).LoadFromStream(Frm.Stream);
dmSQL.qryGrid.Post;
end;
frm.Free;
Stream.Free;
end;
if dmSQL.qryGrid.FieldByName(sFiledName).DataType in [ftMemo] then
begin
Frm := TFrmBlobField.Create(Self);
frm.PictureFormat := 'TEXT';
frm.TextString := TBlobField(dmSQL.qryGrid.FieldByName(sFiledName)).AsString;
frm.tsText.Show;
if frm.ShowModal = mrOK then
begin
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(sFiledName).AsString := frm.mmoText.Lines.Text;
dmSQL.qryGrid.Post;
end;
frm.Free;
end;
// ShowMessage(IntToStr(Ord(dmSQL.qryGrid.FieldByName(sFiledName).DataType)));
end;
procedure TMainForm.actBatchAddExecute(Sender: TObject);
var
Frm: TFrmBatchAdd;
Str: string;
bResult: Boolean;
i, a, b, c: integer;
sValue: array of Variant;
begin
Str := grdClient.SelectedField.FieldName;
Frm := TFrmBatchAdd.Create(Self);
frm.ShowModal;
a := strtoint(frm.edtStart.Text);
b := strtoint(frm.edtEnd.Text);
c := strtoint(frm.edtStep.Text);
bResult := frm.ModalResult = mrOK;
frm.Free;
if not bResult then
Exit;
SetLength(sValue, dmSQL.qryGrid.FieldCount);
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
sValue[i] := dmSQL.qryGrid.Fields[i].Value;
end;
while a <= b do
begin
// dmSQL.qryGrid.Append;
// for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
// begin
// if strFieldName = dmSQL.qryGrid.Fields[i].FieldName then
// dmSQL.qryGrid.Fields[i].AsInteger := a else
// dmSQL.qryGrid.Fields[i].AsString := s[i];
// end;
a := a + c;
dmSQL.qryGrid.Post;
end;
end;
procedure TMainForm.actBrowseTableExecute(Sender: TObject);
begin
lstTable.SetFocus;
end;
procedure TMainForm.actOpenDBExecute(Sender: TObject);
var
i: integer;
begin
i := TFrmSelectDB.ShowMe;
if i <> -1 then
begin
BaseObjects.Clear;
AllObjects.Clear;
AllField.Clear;
dmSQL.CurCOnItem := dblist.Items[i];
dmSQL.con.disconnect;
dmSQL.ConnectDB(dmSQL.CurCOnItem);
Application.CreateForm(TFrmSplash, FrmSplash);
FrmSplash.ShowModal;
FrmSplash.Free;
dmSQL.RefreshAllObject;
dmSQL.RefreshObject(lstTable.Items);
ShowCaption;
end;
end;
function IsInList(Str: string; SList: TStringList): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to SList.Count - 1 do
begin
if Str = SList.Strings[i] then
begin
Result := True;
Break;
end;
end;
end;
procedure TMainForm.actToolsOptionExecute(Sender: TObject);
var
Frm: TFrmToolsOption;
begin
Frm := TFrmToolsOption.Create(Self);
if Frm.ShowModal = mrOK then
LoadPlugins;
Frm.Free;
end;
procedure VArrayToStrings(const Value: OleVariant; AStrs: TStrings);
var
i: Integer;
begin
AStrs.Clear;
if VarIsArray(Value) then
begin
for I := 0 to VarArrayHighBound(Value, 1) do
begin
AStrs.Add(VarToStr(Value[i]));
end;
end;
end;
procedure TMainForm.LoadPlugins;
var
i: Integer;
PlugItem: TMenuItemEx;
begin
for i := miPlugins.Count - 1 downto 0 do
miPlugins.Items[i].Free;
for i := 0 to aToolsList.Count - 1 do
begin
PlugItem := TMenuItemEx.Create(Self);
PlugItem.OnClick := PlugItemClick;
miPlugins.Add(PlugItem);
PlugItem.Caption := aToolsList.Items[i].Title;
PlugItem.Tag := i;
end;
end;
function TMainForm.MicroExpand(Params: string): string;
begin
Result := Params;
if Pos('<-S>', Result) > 0 then
Result := AnsiReplaceText(Result, '<-S>', dmSQL.CurCOnItem.HostName);
if Pos('<-U>', Result) > 0 then
Result := AnsiReplaceText(Result, '<-U>', dmSQL.CurCOnItem.UserName);
if Pos('<-P>', Result) > 0 then
Result := AnsiReplaceText(Result, '<-P>', dmSQL.CurCOnItem.Password);
if Pos('<-D>', Result) > 0 then
Result := AnsiReplaceText(Result, '<-D>', dmSQL.CurCOnItem.DBName);
end;
procedure TMainForm.PlugItemClick(Sender: TObject);
var
ProgramName: string;
WorkDir: string;
Title: string;
Params: string;
begin
ProgramName := aToolsList.Items[(Sender as TMenuItem).Tag].ProgramName;
WorkDir := aToolsList.Items[(Sender as TMenuItem).Tag].WorkDir;
Title := aToolsList.Items[(Sender as TMenuItem).Tag].Title;
Params := aToolsList.Items[(Sender as TMenuItem).Tag].Parameter;
Params := MicroExpand(Params);
ShellExecute(0, 'open', PChar(ProgramName), PChar(Params), PChar(WorkDir), SW_SHOW);
end;
procedure TMainForm.actSelectAllExecute(Sender: TObject);
begin
// if SQLEditor.Focused then
// SQLEditor.SelectAll;
if grdClient.Focused then
grdclient.Selection.SelectAll;
end;
procedure TMainForm.ShowCaption;
begin
Caption := Format('DBHelper2017 [%s:%d->%s:%s(%d)<%s> %s', [
DBList.Items[DBList.ItemIndex].HostName,
DBList.Items[DBList.ItemIndex].HostPort,
DBList.Items[DBList.ItemIndex].DBName,
DBList.Items[DBList.ItemIndex].UserName,
AllObjects.Count,
DBList.Items[DBList.ItemIndex].CfgFile,
CurSQLFile
]);
end;
procedure TMainForm.actSaveSQLUpdate(Sender: TObject);
begin
// actSaveSQL.Enabled := SQLEditor.Modified;
end;
procedure TMainForm.cmdMinColWidthClick(Sender: TObject);
var
i: integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
for i := 0 to grdClient.Columns.Count - 1 do
begin
grdClient.Columns[i].Width := Canvas.TextWidth(grdClient.Columns[i].Title.Caption) + 10;
end;
end;
procedure TMainForm.mmoDblClick(Sender: TObject);
begin // 得到当前行号
//i:= mmo.Perform(EM_LINEFROMCHAR,mmo.SelStart,0);
end;
procedure TMainForm.myOnMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
if ssCtrl in Shift then
begin
if WheelDelta > 0 then
SendMessage((Sender as TDBGridEh).Handle, WM_HSCROLL, 0, 1)
else
SendMessage((Sender as TDBGridEh).Handle, WM_HSCROLL, 1, 1);
Handled := True;
end;
end;
procedure TMainForm.MyShortCutKeyExecute(Sender: TObject);
var
Str: string;
begin
if not (sender is TActionEx) then
Exit;
Str := (sender as TActionEx).FuncName;
end;
procedure TMainForm.miOpenApplicatioinDirClick(Sender: TObject);
begin
winexec(PAnsiChar('explorer ' + ExtractFileDir(Application.ExeName)), SW_SHOW);
end;
//右移全部表名
procedure TMainForm.miToRightClick(Sender: TObject);
var
j: Integer;
begin
for j := lstTable.Count - 1 downto 0 do
dmSQL.RefreshObject(lstTable.Items);
try
if lstTable.Items.Count > 0 then
begin
lstTable.Selected[0] := True;
lstTableClick(Self);
end;
except
end;
end;
procedure TMainForm.MenuItem4Click(Sender: TObject);
begin
dmSQL.qryGrid.Filtered := False;
end;
procedure TMainForm.grdClientTitleClick(Column: TColumnEh);
begin
SetGridEhColumnSort(dmSQL.qryGrid, Column);
end;
procedure TMainForm.N20Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to chklst.Count - 1 do
chklst.Checked[i] := True;
end;
function GetArgListWithNames(S1, S2: string): string;
var
S: string;
StrList: TStringList;
i: Integer;
begin
S1 := AnsiReplaceText(S1, '{', '');
S1 := AnsiReplaceText(S1, '}', '');
if pos(',', S1) > 0 then
begin
StrList := TStringList.Create;
try
StrList.Delimiter := ',';
StrList.DelimitedText := S1;
for i := 0 to StrList.Count - 1 do
begin
S := StrList.Strings[i];
with dmSQL.GetDataSet(format('select oid,typename from pg_type where oid=%s', [S])) do
begin
StrList.Strings[i] := StrList.Strings[i] + '=' + FieldByName('typename').AsString;
Free;
end;
end;
finally
StrList.Free;
end;
end;
end;
procedure TMainForm.N26Click(Sender: TObject);
begin
WriteGridWidth(CurEnv.TableCode, grdClient);
end;
procedure TMainForm.actDeletSQLExecute(Sender: TObject);
var
s, AllData, InsertFmt: string;
i, j: integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
s := '';
AllData := '';
InsertFmt := 'DELETE FROM ' + BaseObjects.Items[BaseObjects.ItemIndex].TableCode + ' WHERE ';
for j := grdClient.Selection.SelectionToGridRect.Top to grdClient.Selection.SelectionToGridRect.Bottom do
begin
s := '';
dmsql.qryGrid.RecNo := j;
for i := grdClient.Selection.SelectionToGridRect.Left - 1 to grdClient.Selection.SelectionToGridRect.Right - 1 do
s := s + grdClient.Columns[i].FieldName + '=''' + grdClient.DataSource.DataSet.fieldbyname(grdClient.Columns[i].FieldName).AsString + ''' AND ';
s := InsertFmt + s;
Delete(s, Length(s) - 4, 4);
if appset.AddSemicolon then
s := s + ';';
alldata := alldata + s + #13 + #10;
// dmsql.qryGrid.Next;
end;
if appset.LinesForCommit > 0 then
alldata := alldata + AppSet.CommitCmd + #13 + #10;
Clipboard.AsText := alldata;
end;
procedure TMainForm.PyPlugInsClick(Sender: TObject);
begin
if Sender is TMenuItemEx then
begin
fsScript1.Clear;
fsScript1.Lines.LoadFromFile(TMenuItemEx(Sender).FileName);
fsScript1.SyntaxType := 'PascalScript';
fsScript1.Parent := fsGlobalUnit;
if not fsScript1.Compile then
begin
mmoMessages.Lines.Add(fsScript1.ErrorMsg);
Exit;
end;
Application.ProcessMessages;
try
fsScript1.Execute;
finally
end;
end;
end;
procedure TMainForm.QueryBuilderDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
Tbl: TQBTable;
OldCur: TCursor;
iIdx: Integer;
SelLI, N, O, F: string;
Params: TParams;
begin
if Source <> lstTable then Exit;
SelLI := CurEnv.TableCode;
if SelLI = '' then
Exit;
OldCur := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
Tbl := QueryBuilder.Tables.AddTable(SelLI, '', dmSQL.QryGrid);
if (Tbl <> nil) and (X <> 0) and (Y <> 0) then
begin
Tbl.Left := X;
Tbl.Top := Y;
end;
finally
Screen.Cursor := OldCur;
end;
end;
procedure TMainForm.QueryBuilderDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source = lstTable) and (lstTable.ItemIndex > -1);
end;
//procedure TMainForm.QueryBuilderEnterProcParameter(Sender: TObject;
// SProcedure: TQBTable; ListItem: TQBListItem);
//begin
// InputParam(ListItem);
//end;
procedure TMainForm.QueryBuilderGetTableFields(const NameOfTable: string;
var ADataSet: TDataSet; var AParams: TParams);
//var
// Params: TParams;
begin
// Screen.Cursor := crHourGlass;
// try
// dmSQL.QryGrid.Active := false;
// S := QueryBuilder.Parser.Scanner.ProcessName(NameOfTable);
// P := QueryBuilder.Parser.TableDefs.FindByName(NameOfTable);
//if (P <> nil) and (P.TableDefType = qttStoredProc) then
// begin
// Params := TParams.Create;
// GetFuncParams(S, Params);
// S := S + GetFuncParamText(Params);
// AParams := Params;
// end;
// dmSQL.QryGrid.SQL.Text := Format(cSelect, [S]);
// dmSQL.QryGrid.Open;
// ADataSet := dmSQL.QryGrid;
// finally
// Screen.Cursor := crDefault;
// end;
end;
procedure TMainForm.QueryBuilderParserError(Sender: TObject; const ErrorMsg,
Token: string; LineNo, LinePos: Integer);
begin
// mmSQL.SelStart := TQBSelectParser(Sender).Scanner.Position - Length(Token) - 1;
// mmSQL.SelLength := Length(Token);
// MessageDlg(ErrorMsg, mtError, [mbOk], 0);
end;
procedure TMainForm.SetupGridWidth(TableName: string; Grd: TDBGridEh);
var
ini: TIniFile;
I, FieldWidth, FieldIndex: Integer;
begin
if (grdclient.DataSource = nil) or (grdclient.DataSource.DataSet = nil) or (not grdclient.DataSource.DataSet.Active) then
Exit;
if not FileExists(AppSet.AppDir + '\Style\' + TableName + '.ini') then
Exit;
ini := TIniFile.Create(AppSet.AppDir + '\Style\' + TableName + '.ini');
for I := 0 to grdclient.Columns.Count - 1 do
begin
FieldWidth := ini.ReadInteger(Grd.Columns[I].FieldName, 'FieldWidth', 10);
FieldIndex := ini.ReadInteger(Grd.Columns[I].FieldName, 'FieldIndex', 0);
Grd.Columns[I].Index := FieldIndex;
Grd.Columns[I].Width := FieldWidth;
end;
ini.Free;
end;
procedure TMainForm.WriteGridWidth(TableName: string; Grd: TDBGridEh);
var
ini: TIniFile;
I: Integer;
begin
if not DirectoryExists(AppSet.AppDir + '\Style\') then
CreateDir(AppSet.AppDir + '\Style\');
ini := TIniFile.Create(AppSet.AppDir + '\Style\' + TableName + '.ini');
for I := 0 to grdclient.Columns.Count - 1 do
begin
ini.WriteInteger(Grd.Columns[I].FieldName, 'FieldWidth', Grd.Columns[I].Width);
ini.WriteInteger(Grd.Columns[I].FieldName, 'FieldIndex', Grd.Columns[I].Index);
end;
ini.Free;
end;
procedure TMainForm.actLockDataStyleExecute(Sender: TObject);
begin
actLockDataStyle.Checked := not actLockDataStyle.Checked;
end;
procedure TMainForm.btn7Click(Sender: TObject);
begin
if dmSQL.ExecSQL(edtSQLViewer.Text) then
ShowInfo('语句执行成功:');
end;
procedure TMainForm.btn8Click(Sender: TObject);
begin
Clipboard.AsText := edtSQLViewer.Text;
ShowInfo('已复制语句到剪切板');
end;
procedure TMainForm.MenuItem6Click(Sender: TObject);
var
SList: TStringList;
i, j: integer;
begin
dlgSave.DefaultExt := '.sql';
dlgSave.Filter := 'SQL文件|.sql';
if DirectoryExists(AppSet.AppDir + '\SQL') then
dlgSave.InitialDir := AppSet.AppDir + '\SQL';
j := 0;
for i := 0 to chklst.Count - 1 do
begin
if chklst.Checked[i] then
Inc(j);
end;
if j < 1 then
begin
ShowMessage('必须选择要导出的字段');
Exit;
end;
if dlgSave.Execute then
begin
SList := TStringList.Create;
CurSQLFile := dlgSave.FileName + '.txt';
for i := 0 to chklst.Count - 1 do
if chklst.Checked[i] then
SList.Add(chklst.Items.Strings[i]);
SList.SaveToFile(CurSQLFile);
end;
end;
procedure TMainForm.grpListResize(Sender: TObject);
begin
lstTable.Height := grpList.Height - 32;
chklst.Height := grpList.Height - 32;
end;
procedure TMainForm.actFilterFieldsExecute(Sender: TObject);
begin
// if dmSQL.GetActiveEditor.Focused then
// actSQLEditorSave.Execute
// else
// dmSQL.GetActiveEditor.SetFocus;
end;
procedure TMainForm.edtFieldsEnter(Sender: TObject);
begin
edtFields.Color := $0060FFFF;
end;
procedure TMainForm.edtFieldsExit(Sender: TObject);
begin
edtFields.Color := $00E6F4FF;
end;
procedure TMainForm.edtFieldsKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FieldListFilter(Key);
end;
procedure TMainForm.edtSelectEnter(Sender: TObject);
begin
edtSelect.Color := $0060FFFF;
end;
procedure TMainForm.edtSelectExit(Sender: TObject);
begin
edtSelect.Color := $00E6F4FF;
end;
procedure TMainForm.edtSelectKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
dmSQL.GetTables(Trim(edtSelect.Text));
dmSQL.RefreshObject(lstTable.Items);
if lstTable.Items.Count > 0 then
begin
lstTable.ItemIndex := 0;
BaseObjects.ItemIndex := 0;
lstTable.OnClick(Self);
end;
end;
end;
procedure TMainForm.edtSelectKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin //下面的代码必须有重复,则否会造成判断不准,当输入'号时,出现异常
if Key = VK_UP then
begin
lstTable.ItemIndex := lstTable.ItemIndex - 1;
lstTable.Selected[lstTable.ItemIndex] := true;
lstTable.OnClick(Self);
end;
if Key = VK_DOWN then
begin
lstTable.ItemIndex := lstTable.ItemIndex + 1;
lstTable.Selected[lstTable.ItemIndex] := true;
lstTable.OnClick(Self);
end;
end;
procedure TMainForm.btnDelRecordMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
tmrDelBtn.Interval := 500;
tmrDelBtn.Enabled := True;
end;
procedure TMainForm.btnDelRecordMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
tmrDelBtn.Enabled := False;
end;
procedure TMainForm.btnExportClick(Sender: TObject);
var
QExportDialog1: TQExport4Dialog;
begin
QExportDialog1 := TQExport4Dialog.Create(Self);
try
QExportDialog1.ShowFile := False;
QExportDialog1.DBGrid := grdClient;
QExportDialog1.DataSet := dmSQL.QryGrid;
QExportDialog1.Execute;
finally
QExportDialog1.Free;
end;
end;
procedure TMainForm.btnImportClick(Sender: TObject);
var
Import2Wizard: TQImport3Wizard;
begin
if not dmSQL.QryGrid.Active then
begin
ShowInfo('请先打开数据集');
Exit;
end;
Import2Wizard := TQImport3Wizard.Create(Self);
Import2Wizard.CloseAfterImport := True;
// QImportLocale.LoadDll('QIChinese.dll');
try
Import2Wizard.DataSet := dmSQL.QryGrid;
Import2Wizard.execute;
finally
Import2Wizard.Free;
end;
SetStatusRecord;
end;
procedure TMainForm.btn11Click(Sender: TObject);
begin
edtSQLViewer.Clear;
end;
procedure TMainForm.btnQuickInsertClick(Sender: TObject);
var
s, InsertFmt: string;
i: Integer;
sl: TStringList;
begin
i := 0;
if grdClient.DataSource.DataSet = nil then
Exit;
InsertFmt := dmSQL.CreateTableModal(CurEnv.TableCode, dmSQL.QryGrid);
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
sl := TStringList.Create;
try
sl.Add(Format('--%d', [dmSQL.QryGrid.RecordCount]));
if not AppSet.AddTruncate then
s := '--';
s := s + 'DELETE FROM ' + CurEnv.TableCode;
if AppSet.AddSemicolon then
s := s + ';';
sl.Add(s);
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.First;
dmSQL.qryGrid.DisableControls;
while not dmSQL.qryGrid.Eof do
begin
sl.Add(BuildSqlFromFmt(InsertFmt, dmSQL.qryGrid));
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.Next;
end;
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.EnableControls;
Clipboard.AsText := sl.Text;
ShowInfo('已复制数据集Insert语句到剪切板');
finally
sl.Free;
end;
end;
procedure TMainForm.btn4Click(Sender: TObject);
begin
mmoMessages.Clear;
end;
procedure TMainForm.btn5Click(Sender: TObject);
begin
clipbrd.Clipboard.AsText := mmoMessages.Text;
end;
{-----------------------------------------------------------------------------
Procedure: BatchUpdate1Click
Author: hb
Date: 18-七月-2006
Arguments: Sender: TObject
Result: None
批更新功能的实现,从当前记录到最指定的最大记录数为止的数据集将被指定的数值进行更新
-----------------------------------------------------------------------------}
procedure TMainForm.BatchUpdate1Click(Sender: TObject);
var
Frm: TFrmBatchAdd;
bResult, bFieldValue, bFirstRecord, bQuickRun: Boolean;
strFieldName, StrRepl, Str: string;
Update: TBatchUpdate;
begin
Update := TBatchUpdate.Create;
Frm := TFrmBatchAdd.Create(Self);
Frm.edtStart.Text := '1';
Frm.edtEnd.Text := IntToStr(dmSQL.qryGrid.RecordCount);
bResult := frm.ShowModal = mrOK;
bQuickRun := frm.actQuick.Checked;
bFirstRecord := frm.chkFirstRecord.Checked;
Update.StartValue := frm.edtStart.Text;
bFieldValue := frm.chkFieldValue.Checked;
Update.EndValue := frm.edtEnd.Text;
Update.Step := strtoint(frm.edtStep.Text);
Update.ExpString := Trim(frm.edtPattern.Text);
StrRepl := Trim(frm.edtRepl.Text);
frm.Free;
if (grdClient.SelectedField <> nil) and bResult then
begin
if bFirstRecord then
dmSQL.qryGrid.First;
strFieldName := grdClient.SelectedField.FieldName;
//以下三行执行表达式
if bQuickRun then
dmSQL.qryGrid.DisableControls;
Update.Execute;
while not dmsql.qryGrid.Eof do
begin
if bFieldValue then
begin
Update.InputString := dmSQL.qryGrid.FieldByName(strFieldName).AsString;
Str := Update.OutString(StrRepl);
end else
Str := Update.GetValue;
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(strFieldName).AsString := Str;
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
end;
if bQuickRun then
dmSQL.qryGrid.EnableControls;
end;
end;
{-----------------------------------------------------------------------------
Procedure: N32Click
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
显示在当前字段中选中的列,颜色用指定的颜色显示,可以设置
-----------------------------------------------------------------------------}
{-----------------------------------------------------------------------------
Procedure: cmdCancelSelectedFieldsClick
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
取消所有的选中的列
-----------------------------------------------------------------------------}
procedure TMainForm.chklstDblClick(Sender: TObject);
var
i: Integer; Str: string;
begin
Str := Trim(chklst.Items.Strings[chklst.itemindex]);
i := pos('[', Str);
if i > 0 then
str := copy(str, 1, i - 1);
for i := 0 to grdClient.Columns.Count - 1 do
if UpperCase(Str) = UpperCase(grdClient.Columns[i].FieldName) then
begin
dmSQL.qryGrid.Fields[i].FocusControl;
grdClient.Columns[i].Color := clLime;
chklst.Checked[chklst.itemindex] := true;
Break;
end;
end;
procedure TMainForm.chklstDragDrop(Sender, Source: TObject; X, Y: Integer);
var
iDst, iSrc: Integer;
begin
iSrc := chklst.ItemIndex;
if iSrc < 0 then
Exit;
iDst := chklst.ItemAtPos(Point(x, y), True);
if (iSrc > iDst) and (iDst <> -1) then
begin
chklst.Items.Insert(iDst, chklst.Items[iSrc]);
chklst.Items.Delete(iSrc + 1);
with (AllField.Insert(iDst) as TBaseTableItem) do //Collection的Insert是插入
begin
TableName := AllField.Items[iSrc + 1].TableName;
TableCode := AllField.Items[iSrc + 1].TableCode;
TableDesc := AllField.Items[iSrc + 1].TableDesc;
Selected := AllField.Items[iSrc + 1].Selected;
end;
AllField.Delete(iSrc + 1);
end;
if (iSrc < iDst) then
begin
chklst.Items.Insert(iDst, chklst.Items[iSrc]);
chklst.Items.Delete(iSrc);
with (AllField.Insert(iDst) as TBaseTableItem) do
begin
TableName := AllField.Items[iSrc].TableName;
TableCode := AllField.Items[iSrc].TableCode;
TableDesc := AllField.Items[iSrc].TableDesc;
Selected := AllField.Items[iSrc].Selected;
end;
AllField.Delete(iSrc);
end;
if iDst = -1 then //IDst=-1说明拖到最后一条的下面
begin
chklst.Items.Append(chklst.Items[iSrc]);
chklst.Items.Delete(iSrc);
with AllField.Add do
begin
TableName := AllField.Items[iSrc].TableName;
TableCode := AllField.Items[iSrc].TableCode;
TableDesc := AllField.Items[iSrc].TableDesc;
Selected := AllField.Items[iSrc].Selected;
end;
AllField.Delete(iSrc);
end;
end;
procedure TMainForm.chklstDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Sender = Source);
end;
procedure TMainForm.cmdCancelSelectedFieldsClick(Sender: TObject);
begin
end;
{-----------------------------------------------------------------------------
Procedure: cmdShowSelectedFieldsClick
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
只显示选中的字段
-----------------------------------------------------------------------------}
procedure TMainForm.cmdShowSelectedFieldsClick(Sender: TObject);
var
i, j: integer;
begin
for i := 0 to dmsql.qryGrid.FieldCount - 1 do
dmSQL.qryGrid.Fields[i].Visible := False;
for j := 0 to chklst.Count - 1 do
if chklst.Checked[j] then
dmSQL.qryGrid.FieldByName(chklst.Items.Strings[j]).Visible := true;
end;
{-----------------------------------------------------------------------------
Procedure: cmdHideSelectedFieldsClick
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
隐藏选中的字段
-----------------------------------------------------------------------------}
procedure TMainForm.cmdHideSelectedFieldsClick(Sender: TObject);
var
j: integer;
begin
for j := 0 to chklst.Count - 1 do
if chklst.Checked[j] then
dmSQL.qryGrid.FieldByName(chklst.Items.Strings[j]).Visible := false;
end;
{-----------------------------------------------------------------------------
Procedure: cmdHideThisFieldClick
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
隐藏当前的列
-----------------------------------------------------------------------------}
procedure TMainForm.cmdHideThisFieldClick(Sender: TObject);
begin
dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).Visible := false;
end;
{-----------------------------------------------------------------------------
Procedure: cmdShowAllFieldsClick
Author: Administrator
Date: 19-七月-2006
Arguments: Sender: TObject
Result: None
显示所有字段
-----------------------------------------------------------------------------}
procedure TMainForm.cmdShowAllFieldsClick(Sender: TObject);
var
i: Integer;
begin
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
dmSQL.qryGrid.Fields[i].Visible := true;
end;
end;
procedure TMainForm.btnSortClick(Sender: TObject);
begin
DisplayFieldList(1);
end;
procedure TMainForm.btnSortDescClick(Sender: TObject);
begin
DisplayFieldList(2);
end;
{-----------------------------------------------------------------------------
Procedure: btnSQLCheckClick
Author: LHQ
Date: 02-五月-2008
Arguments: Sender: TObject
Result: None
Desc: SQL语法检查
-----------------------------------------------------------------------------}
procedure TMainForm.btnUploadClick(Sender: TObject);
begin
end;
{-----------------------------------------------------------------------------
Procedure: cmdCopyFieldsNameClick
Author: Administrator
Date: 21-七月-2006
Arguments: Sender: TObject
Result: None
把当前显示的字段放到剪切版中,字段用,号间隔.
-----------------------------------------------------------------------------}
procedure TMainForm.cmdCopyFieldsNameClick(Sender: TObject);
var
i: Integer;
Str: string;
begin
Str := '';
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
if dmSQL.qryGrid.Fields[i].Visible then
Str := Str + ',' + dmsql.qryGrid.Fields[i].FieldName;
end;
Delete(Str, 1, 1);
Clipboard.AsText := Str;
end;
procedure TMainForm.Update1Click(Sender: TObject);
var
i: integer;
SQLText, SQL, StrCondi: string;
begin
SQLText := '';
dmSQL.qryGrid.First;
while not dmSQL.qryGrid.Eof do
begin
SQL := '';
StrCondi := '';
SQL := 'UPDATE ' + CurEnv.TableCode + ' SET ';
SQL := SQL + grdClient.Fields[0].FieldName + ' =''' + grdClient.Fields[0].AsString + ''' WHERE ';
for i := 1 to grdClient.FieldCount - 1 do
begin
StrCondi := StrCondi + grdClient.Fields[i].FieldName + '=''' + grdClient.Fields[i].AsString + ''' AND ';
end;
dmSQL.qryGrid.Next;
SQL := SQL + StrCondi;
Delete(SQL, length(SQL) - 3, 3);
SQLText := SQLText + #13 + #10 + SQL;
end;
clipboard.AsText := SQLText;
end;
procedure TMainForm.grdClientCellMouseClick(Grid: TCustomGridEh;
Cell: TGridCoord; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ix: TPoint;
begin
if Cell.y = TDBGridEh(Grid).DataRowCount + 2 then
begin
GetCursorPos(ix);
pmFooter.Tag := Cell.X;
pmFooter.Popup(ix.x, ix.y);
end;
end;
procedure TMainForm.grdClientDblClick(Sender: TObject);
var
sFiledName: string;
begin
if dmSQL.qryGrid.Active then
begin
sFiledName := grdClient.SelectedField.FieldName;
if dmSQL.qryGrid.FieldByName(sFiledName).DataType in [ftBlob, ftMemo] then
actShowBlob.Execute;
end;
end;
procedure TMainForm.N35Click(Sender: TObject);
var
i: Integer;
s: string;
sList: TStringList;
begin
sList := TStringList.Create;
try
for i := 0 to AllField.count - 1 do
sList.Add(Format('%s=%s', [AllField.Items[i].TableCode, AllField.Items[i].TableName]));
clipboard.AsText := sList.Text;
ShowInfo('已复制字段到剪切板');
finally
sList.Free;
end;
end;
procedure TMainForm.actReOpenDBExecute(Sender: TObject);
begin
lstTable.Clear;
chklst.Clear;
dmSQL.ConnectDB(dmSQL.CurCOnItem);
dmSQL.GetAllObjects;
dmSQL.RefreshObject(lstTable.Items);
ShowCaption;
SendMessage(edtSelect.Handle, WM_CHAR, 13, 0);
end;
procedure TMainForm.actCommitExecute(Sender: TObject);
begin
dmSQL.qryGrid.ApplyUpdates;
actCommit.Enabled := False;
actRollBack.Enabled := False;
SetStatusRecord;
end;
procedure TMainForm.actRollBackExecute(Sender: TObject);
begin
dmSQL.qryGrid.CancelUpdates;
actCommit.Enabled := False;
actRollBack.Enabled := False;
SetStatusRecord;
end;
procedure TMainForm.act1Execute(Sender: TObject);
var
// LEditor: IEditor;
i, j: Integer;
begin
// for i := 0 to GI_EditorFactory.GetEditorCount - 1 do
// begin
// LEditor := GI_EditorFactory.Editor[i];
// if LEditor.Activated then
// begin
// j := i;
// Break;
// end;
// end;
// if j < GI_EditorFactory.GetEditorCount - 1 then
// GI_EditorFactory.Editor[j + 1].Activate
// else
// GI_EditorFactory.Editor[0].Activate;
end;
procedure TMainForm.act2Execute(Sender: TObject);
var
// LEditor: IEditor;
i, j: Integer;
begin
//for i := 0 to GI_EditorFactory.GetEditorCount - 1 do
// begin
// LEditor := GI_EditorFactory.Editor[i];
// if LEditor.Activated then
// begin
// j := i;
// Break;
// end;
// end;
// if j = 0 then
// GI_EditorFactory.Editor[GI_EditorFactory.GetEditorCount - 1].Activate
// else
// GI_EditorFactory.Editor[j - 1].Activate;
end;
procedure TMainForm.actAddFieldExecute(Sender: TObject);
var
Frm: TFrmFieldEditor;
SQL: string;
begin
if CurEnv.TableCode = '' then
exit;
Frm := TFrmFieldEditor.Create(self);
if Frm.ShowModal = mrOK then
begin
SQL := Frm.SQL;
dmSQL.ExecQuery(Format('Alter Table %s %s ', [CurEnv.TableCode, SQL]));
mmoMessages.Lines.Add(Format('Alter Table %s %s ', [CurEnv.TableCode, SQL]))
end;
Frm.Free;
end;
procedure TMainForm.N39Click(Sender: TObject);
var
s: string;
i, m, n: Integer;
begin
m := grdClient.Selection.SelectionToGridRect.Right;
n := grdClient.Selection.SelectionToGridRect.Left;
if m - n > 0 then
begin
s := '';
for i := grdClient.Selection.SelectionToGridRect.Left - 1 to grdClient.Selection.SelectionToGridRect.Right - 1 do
s := s + ',' + grdClient.Columns[i].FieldName;
clipboard.AsText := Copy(s, 2, Length(s));
end else
clipboard.AsText := dmSQL.qryGrid.FieldByName(grdClient.SelectedField.FieldName).FieldName;
ShowInfo('字段名称已复制到剪切版');
end;
procedure TMainForm.miAboutClick(Sender: TObject);
var
Frm: TFrmAbout;
begin
Frm := TFrmAbout.Create(self);
Frm.ShowModal;
Frm.Free;
end;
procedure TMainForm.N17Click(Sender: TObject);
var
Frm: TFrmBatchAdd;
a, b, c: Integer;
i: Integer;
bResult: Boolean;
strFieldName: string;
s: array[0..300] of string;
begin
Frm := TFrmBatchAdd.Create(Self);
frm.ShowModal;
a := strtoint(frm.edtStart.Text);
b := strtoint(frm.edtEnd.Text);
c := strtoint(frm.edtStep.Text);
bResult := frm.ModalResult = mrOK;
frm.Free;
if (grdClient.SelectedField <> nil) and bResult then
begin
strFieldName := grdClient.SelectedField.FieldName;
//给变量值
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
s[i] := dmSQL.qryGrid.Fields[i].AsString;
end;
while a <= b do
begin
dmSQL.qryGrid.Append;
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
if strFieldName = dmSQL.qryGrid.Fields[i].FieldName then
dmSQL.qryGrid.Fields[i].AsInteger := a else
dmSQL.qryGrid.Fields[i].AsString := s[i];
end;
a := a + c;
dmSQL.qryGrid.Post;
end;
end;
end;
procedure TMainForm.N18Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to chklst.Count - 1 do
chklst.Checked[i] := not chklst.Checked[i];
end;
procedure TMainForm.MenuItem3Click(Sender: TObject);
var
sFieldName: string;
begin
sFieldName := grdClient.SelectedField.FieldName;
dmSQL.qryGrid.Filter := sFieldName + '=' + QuotedStr(grdClient.SelectedField.AsString + '*');
dmSQL.qryGrid.Filtered := True;
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-8-25
Description: 增加字段类型的提示
-----------------------------------------------------------------------------}
procedure TMainForm.grdClientMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
StrHint: string;
begin
if dmSQL.qryGrid.Active then
begin
grdClient.ShowHint := True;
if (grdClient.SelectedField <> nil) and (grdClient.SelectedField.FieldName <> '') then
begin
StrHint := '字段类型:%s' + #13 + #10 + '字段长度:%d' + #13 + #10;
grdClient.Hint := Format(StrHint, [FieldTypeStr[grdClient.SelectedField.DataType], grdClient.SelectedField.DataSize]);
end;
end;
end;
procedure TMainForm.N40Click(Sender: TObject);
begin
grdClient.Columns[pmFooter.Tag - 1].Footer.ValueType := fvtSum;
end;
procedure TMainForm.miOpenScriptDirClick(Sender: TObject);
begin
winexec(PAnsiChar('explorer ' + AppSet.PlugInDir), SW_SHOW);
end;
procedure TMainForm.actEdtDBGridExecute(Sender: TObject);
begin
tsDataView.Show;
grdClient.SetFocus;
end;
procedure TMainForm.actedtSQLExecute(Sender: TObject);
begin
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-27
Description: 显示当前数据库中的表
-----------------------------------------------------------------------------}
procedure TMainForm.actShowTableExecute(Sender: TObject);
var
i: Integer;
begin
lstTable.Clear;
dmSQL.CurDataStatus := stTable;
edtSelect.Clear;
edtSelect.SetFocus;
i := dmSQL.RefreshObject(lstTable.Items);
if i > 0 then
lstTable.ItemIndex := i;
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-27
Description: 显示当前数据库中的视图
-----------------------------------------------------------------------------}
procedure TMainForm.actShowViewExecute(Sender: TObject);
var
i: Integer;
begin
lstTable.Clear;
dmSQL.CurDataStatus := stView;
edtSelect.Clear;
edtSelect.SetFocus;
i := dmSQL.RefreshObject(lstTable.Items);
if i > 0 then
lstTable.ItemIndex := i;
end;
procedure TMainForm.actSnapShortExecute(Sender: TObject);
begin
end;
{-----------------------------------------------------------------------------
Author: LHQ
Date: 2006-9-27
Description: 显示当前数据库中的过程
-----------------------------------------------------------------------------}
procedure TMainForm.actShowProcedureExecute(Sender: TObject);
var
i: Integer;
begin
dmSQL.CurDataStatus := stProcedure;
dmSQL.RefreshObject(lstTable.Items);
edtSelect.Clear;
edtSelect.SetFocus;
i := dmSQL.RefreshObject(lstTable.Items);
if i > 0 then
lstTable.ItemIndex := i;
end;
procedure TMainForm.N46Click(Sender: TObject);
var
Frm: TFrmCopyData;
s, StrDel: string;
i: Integer;
begin
Frm := TFrmCopyData.Create(Self);
Frm.ShowModal;
if frm.modalresult = mrok then
begin
s := '';
if frm.Edit1.Text = '\n' then
strdel := #13#10 else
strdel := frm.edit1.Text;
if frm.RadioButton1.Checked then
begin
dmsql.QryGrid.First;
while not dmsql.QryGrid.eof do
begin
s := s + dmsql.QryGrid.FieldByName(grdClient.SelectedField.FieldName).AsString + strdel;
dmsql.QryGrid.Next;
end;
end;
if frm.RadioButton2.Checked then
begin
for i := 0 to dmsql.qryGrid.FieldCount - 1 do
s := s + dmsql.qryGrid.Fields[i].AsString + strdel;
end;
if frm.RadioButton3.Checked then
begin
DBGridEh_DoCopyAction(grdClient, False);
end;
Clipboard.AsText := s;
ShowInfo('已复制数据到剪切板');
end;
frm.Free;
end;
procedure TMainForm.miToSelectedTablesClick(Sender: TObject);
var
j: Integer;
begin
for j := lstTable.Count - 1 downto 0 do
begin
end;
dmSQL.RefreshObject(lstTable.Items);
if lstTable.Items.Count > 0 then
begin
lstTable.Selected[0] := True;
lstTableClick(Self);
end;
end;
procedure TMainForm.actExecCmdExecute(Sender: TObject);
begin
edtFields.SetFocus;
end;
procedure TMainForm.actExportHTMLExecute(Sender: TObject);
var
Html: TDBGridEhExportAsHTML;
begin
dlgSave.DefaultExt := '.html';
dlgSave.Filter := 'HTML文件|.html';
dlgSave.FileName := CurEnv.TableCode;
if dlgSave.Execute then
begin
Html := TDBGridEhExportAsHTML.Create;
try
Html.DBGridEh := grdClient;
Html.ExportToFile(dlgSave.FileName, True);
if Application.MessageBox('文件已经生成,您要打开当前文件吗?', '提示', MB_YESNO + MB_ICONQUESTION) = IDYES then
ShellExecute(Self.Handle, 'Open', pChar(dlgSave.FileName), '', '', SW_NORMAL);
finally
Html.Free;
end;
end;
end;
procedure TMainForm.actExportRTFExecute(Sender: TObject);
var
Html: TDBGridEhExportAsRTF;
begin
dlgSave.DefaultExt := '.rtf';
dlgSave.Filter := 'RTF文件|.rtf';
dlgSave.FileName := CurEnv.TableCode;
if dlgSave.Execute then
begin
Html := TDBGridEhExportAsRTF.Create;
try
Html.DBGridEh := grdClient;
Html.ExportToFile(dlgSave.FileName, True);
if Application.MessageBox('文件已经生成,您要打开当前文件吗?', '提示', MB_YESNO + MB_ICONQUESTION) = IDYES then
ShellExecute(Self.Handle, 'Open', pChar(dlgSave.FileName), '', '', SW_NORMAL);
finally
Html.Free;
end;
end;
end;
procedure TMainForm.actExportXLSExecute(Sender: TObject);
var
Html: TDBGridEhExportAsXLS;
begin
dlgSave.DefaultExt := '.xls';
dlgSave.Filter := 'Excel文件|.xls';
dlgSave.FileName := CurEnv.TableCode;
if dlgSave.Execute then
begin
Html := TDBGridEhExportAsXLS.Create;
try
Html.DBGridEh := grdClient;
Html.ExportToFile(dlgSave.FileName, True);
if Application.MessageBox('文件已经生成,您要打开当前文件吗?', '提示', MB_YESNO + MB_ICONQUESTION) = IDYES then
ShellExecute(Self.Handle, 'Open', pChar(dlgSave.FileName), '', '', SW_NORMAL);
finally
Html.Free;
end;
end;
end;
procedure TMainForm.actExportSVCExecute(Sender: TObject);
var
Html: TDBGridEhExportAsCSV;
begin
dlgSave.Filter := 'CSV文件|.csv';
dlgSave.DefaultExt := '.csv';
dlgSave.FileName := CurEnv.TableCode;
if dlgSave.Execute then
begin
if FileExists(dlgSave.FileName) then
if Application.MessageBox('文件已存在,您想要覆盖已存在的文件吗?', '注意', MB_YESNO + MB_ICONQUESTION) <> IDYES then
Exit;
Html := TDBGridEhExportAsCSV.Create;
try
Html.Separator := ',';
Html.DBGridEh := grdClient;
Html.ExportToFile(dlgSave.FileName, True);
if Application.MessageBox('文件已经生成,您要打开当前文件吗?', '提示', MB_YESNO + MB_ICONQUESTION) = IDYES then
ShellExecute(Self.Handle, 'Open', pChar(dlgSave.FileName), '', '', SW_NORMAL);
finally
Html.Free;
end;
end;
end;
procedure TMainForm.actPrintExecute(Sender: TObject);
begin
if not dmSQL.QryGrid.Active then
Exit;
PrintDBGridEh1.DBGridEh := grdClient; //如果不加string强制转换,则数据库名称只显示一个字母T,因为返回的是WideString.只有String才能正常显示.
PrintDBGridEh1.SetSubstitutes(['[DBaseCode]', string(dmSQL.con.Database), '[DBaseName]', dmSQL.CurCOnItem.Caption, '[TableName]', CurEnv.TableName, '[TableCode]', CurEnv.TableCode, '[Today]', FormatDateTime('YYYY-MM-DD HH:MM:SS', Now)]);
PrintDBGridEh1.Preview;
end;
procedure TMainForm.actWordCorrectExecute(Sender: TObject);
var
FrmWordCorrect: TFrmWordCorrect;
begin
FrmWordCorrect := TFrmWordCorrect.Create(Self);
FrmWordCorrect.ShowModal;
FrmWordCorrect.Free;
end;
procedure TMainForm.WMDragFiles(var Msg: TMESSAGE);
var
i: Integer;
StrFiles: TStringList;
begin
StrFiles := TStringList(Msg.WParam);
if Assigned(StrFiles) then
begin
for i := 0 to StrFiles.Count - 1 do
begin
end;
end;
end;
procedure TMainForm.actSQLEditorOpenExecute(Sender: TObject);
var
i: integer;
begin
dlgOpen.InitialDir := AppSet.AppDir + '\SQL';
if dlgOpen.Execute then
begin
if dlgOpen.Files.Count > 0 then
for i := 0 to dlgOpen.Files.Count - 1 do
begin
CurSQLFile := dlgOpen.Files.Strings[i];
pgcSQLEditor.ActiveEditor.Lines.LoadFromFile(CurSQLFile);
ShowCaption;
end;
end;
end;
procedure TMainForm.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.actRunSQLEditorWordExecute(Sender: TObject);
var
SelText: string;
aItems: TBaseTableItem;
begin
// SelText := dmSQL.GetActiveEditor.GetSelText;
// aItems := dmSQL.GetTableCodeFromAllTableCode(Trim(SelText));
// if aItems <> nil then
// begin
// if dmSQL.CurDataStatus = stTable then
// DisplayDBGrid(aItems);
// if dmSQL.CurDataStatus = stProcedure then
// DisplayStorProcedure(aItems);
// if dmSQL.CurDataStatus = stView then
// begin
// DisplayDBGrid(aItems);
// DisplayFieldList(0);
// edtSQLViewer.Lines.Text := dmSQL.GetViewSQL(aItems);
// end;
// end;
end;
procedure TMainForm.actLstUpdate(Action: TBasicAction;
var Handled: Boolean);
resourcestring
SModified = '已修改';
var
ptCaret: TPoint;
begin
// actUpdateStatusBar.Enabled := TRUE;
// GI_ActiveEditor := dmSQL.GetActiveEditor;
/// if GI_ActiveEditor = nil then
// begin
// StatusBar.Panels[9].Text := '';
// StatusBar.Panels[10].Text := '';
// StatusBar.Panels[11].Text := '';
// Exit;
// end;
// ptCaret := GI_ActiveEditor.GetCaretPos;
// if (ptCaret.X > 0) and (ptCaret.Y > 0) then
// StatusBar.Panels[9].Text := Format(' %6d:%3d ', [ptCaret.Y, ptCaret.X])
// else
// StatusBar.Panels[9].Text := '';
if pgcSQLEditor.ActiveEditor.Modified then
begin
StatusBar.Panels[10].Text := SModified;
actSQLEditorSave.Enabled := True;
end else
begin
StatusBar.Panels[10].Text := '';
actSQLEditorSave.Enabled := False;
end;
//// actRun.Enabled := GI_ActiveEditor.GetText <> '';
// StatusBar.Panels[11].Text := GI_ActiveEditor.GetEditorState;
end;
procedure TMainForm.actSQLViewsExecute(Sender: TObject);
begin
tsSQLViewer.Show;
edtSQLViewer.SetFocus;
end;
procedure TMainForm.actFindExecute(Sender: TObject);
var
Str: string;
begin
if grdClient.Focused then
begin
if Assigned(grdClient.DataSource.DataSet) and (grdClient.DataSource.DataSet.Active) then
begin
Str := grdClient.SelectedField.AsString;
ExecuteDBGridEhFindDialogProc(TDBGridEh(grdClient), str, grdClient.SelectedField.FieldName, nil, false);
end;
end else
begin
// if GI_SearchCmds <> nil then
// GI_SearchCmds.ExecFind;
end;
end;
procedure TMainForm.actFindNextExecute(Sender: TObject);
begin
// if GI_SearchCmds <> nil then
// GI_SearchCmds.ExecFindNext;
end;
procedure TMainForm.actReplaceExecute(Sender: TObject);
begin
// if GI_SearchCmds <> nil then
// GI_SearchCmds.ExecReplace;
end;
procedure TMainForm.actPrevExecute(Sender: TObject);
begin
// if GI_SearchCmds <> nil then
// GI_SearchCmds.ExecFindPrev;
end;
procedure TMainForm.tmrDelBtnTimer(Sender: TObject);
begin
tmrDelBtn.Interval := 100;
btnDelRecord.Click;
end;
procedure TMainForm.actReLoadScriptExecute(Sender: TObject);
var
i: Integer;
begin
for i := miPyScript.Count - 1 downto 2 do
begin
miPyScript.Items[i].Free;
end;
LoadPascalPlugIns
end;
procedure TMainForm.N8Click(Sender: TObject);
var
iOld: integer;
begin
iOld := AppSet.TopLines;
AppSet.TopLines := 0;
lstTableClick(nil);
AppSet.TopLines := iOld;
end;
procedure TMainForm.pmGrdPopup(Sender: TObject);
var
i: integer;
begin
if not dmSQL.qryGrid.Active then
begin
for i := 0 to pmGrd.Items.Count - 1 do
pmGrd.Items[i].Enabled := False;
end else
begin
for i := 0 to pmGrd.Items.Count - 1 do
pmGrd.Items[i].Enabled := True;
N12.Enabled := grdClient.SelectedField.DataType in [ftBlob, ftMemo, ftGraphic, ftFmtMemo];
end;
end;
procedure TMainForm.pmOpenSQLFileClick(Sender: TObject);
var
WorkDir: string;
begin
WorkDir := (Sender as TMenuItemEx).FileName;
if FileExists(WorkDir) then
begin
pgcSQLEditor.edtSQLViewer.Lines.LoadFromFile(WorkDir);
pgcSQLEditor.edtSQLViewer.Modified := False;
CurSQLFile := WorkDir;
ShowCaption;
// dlgOpen.InitialDir := WorkDir;
// dlgOpen.FileName := '';
// if dlgOpen.Execute then
// begin
// CurSQLFile := dlgOpen.FileName;
// end;
end;
end;
procedure TMainForm.pmSaveSQLFileClick(Sender: TObject);
var
WorkDir: string;
begin
WorkDir := (Sender as TMenuItemEx).FileName;
if not DirectoryExists(WorkDir) then
Exit;
dlgSave.DefaultExt := '.sql';
dlgSave.Filter := 'SQL文件|.sql';
dlgSave.InitialDir := WorkDir;
dlgSave.FileName := '';
if dlgSave.Execute then
begin
// dmSQL.GetActiveEditor.SetFileName(dlgSave.FileName);
// dmSQL.GetActiveEditor.SaveChanges;
end;
end;
procedure TMainForm.actOptColWidthExecute(Sender: TObject);
var
i: integer;
begin
for i := 0 to grdClient.Columns.Count - 1 do
grdClient.Columns[i].OptimizeWidth;
end;
procedure TMainForm.ApplicationEvents1Hint(Sender: TObject);
begin
if GetLongHint(Application.Hint) <> '' then
StatusBar.Panels[12].Text := GetLongHint(Application.Hint)
else
StatusBar.Panels[12].Text := '';
end;
procedure TMainForm.autofit1Click(Sender: TObject);
begin
if not dmSQL.QryGrid.Active then
Exit;
if autofit1.Checked then
grdClient.AutoFitColWidths := True
else
grdClient.AutoFitColWidths := false;
end;
procedure TMainForm.Update2Click(Sender: TObject);
var
i, j: Integer;
StrSQL, StrSQLS, Str, StrWhere: string;
bUpdated: Boolean;
begin
StrSQL := '';
StrSQLS := '';
dmSQL.qryGrid.First;
while not dmSQL.qryGrid.Eof do
begin
Str := '';
StrWhere := '';
bUpdated := False;
for i := 0 to dmSQL.qryGrid.FieldCount - 1 do
begin
if dmSQL.qryGrid.Fields[i].OldValue <> dmSQL.qryGrid.Fields[i].Value then
begin
if dmSQL.qryGrid.Fields[i].DataType in [ftString, ftDate, ftTime, ftDateTime, ftWideString] then
begin
Str := Str + dmSQL.qryGrid.Fields[i].FieldName + '=''' + vartostr(dmSQL.qryGrid.Fields[i].Value) + ''',';
bUpdated := True;
end else
begin
Str := Str + dmSQL.qryGrid.Fields[i].FieldName + '=' + vartostr(dmSQL.qryGrid.Fields[i].Value) + ',';
bUpdated := True;
end;
end;
end;
for j := 0 to dmsql.qryGrid.FieldCount - 1 do
begin
if bupdated then
begin
if dmsql.qryGrid.Fields[j].DataType in [ftString, ftDate, ftTime, ftDateTime, ftWideString] then
StrWhere := StrWhere + ' ' + dmSQL.qryGrid.Fields[j].FieldName + '=''' + vartostr(dmSQL.qryGrid.Fields[j].OldValue) + ''' AND '
else
StrWhere := StrWhere + ' ' + dmSQL.qryGrid.Fields[j].FieldName + '=' + vartostr(dmSQL.qryGrid.Fields[j].OldValue) + ' AND ';
end;
end;
if bUpdated then
begin
delete(Str, length(str), 1);
delete(StrWhere, length(StrWhere) - 4, 4);
StrSQL := 'UPDATE ' + CurEnv.TableCode + ' Set ' + Str + ' WHERE ' + StrWhere + ';' + #13 + #10;
StrSQLS := StrSQLS + StrSQL;
end;
dmSQL.qryGrid.Next;
end;
Clipboard.AsText := StrSQLS;
end;
procedure TMainForm.N43Click(Sender: TObject);
var
s: string;
i, j: Integer;
begin
if inputquery('删除多少条记录', '请输入要删除的记录条数', s) then
begin
try
i := strtoint(s);
except
ShowMessage('请输入一个有效的整数');
Exit;
end;
for j := 0 to i - 1 do
grdClient.DataSource.DataSet.Delete;
end;
end;
procedure TMainForm.cmdTerminateClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.lmiEditSelectAllClick(Sender: TObject);
begin
edtSQLViewer.SelectAll;
end;
procedure TMainForm.N52Click(Sender: TObject);
begin
// dmSQL.frxReport1.DesignReport;
end;
procedure TMainForm.N53Click(Sender: TObject);
var
i: Integer;
stList: TStringList;
CurField: string;
begin
if not dmSQL.QryGrid.Active then
Exit;
if grdClient.SelectedField = nil then
Exit;
CurField := grdClient.SelectedField.FieldName;
stList := TStringList.Create;
stList.Text := Clipboard.AsText;
for i := 0 to stList.Count - 1 do
begin
try
dmSQL.qryGrid.Edit;
dmSQL.qryGrid.FieldByName(CurField).AsString := stList.Strings[i];
dmSQL.qryGrid.Post;
dmSQL.qryGrid.Next;
if dmSQL.qryGrid.Eof then
Break;
except
tsMessages.Show;
mmoMessages.Lines.Add('更新值出错' + CurField + ':' + stList.Strings[i]);
end;
end;
stList.Free;
end;
procedure TMainForm.N61Click(Sender: TObject);
begin
grdClient.Columns[pmFooter.Tag - 1].Footer.ValueType := fvtCount;
end;
procedure TMainForm.N62Click(Sender: TObject);
begin
grdClient.Columns[pmFooter.Tag - 1].Footer.ValueType := fvtNon;
end;
procedure TMainForm.N7Click(Sender: TObject);
begin
winexec(PAnsiChar('explorer ' + AppPath + 'SQL'), SW_SHOW);
end;
procedure TMainForm.N55Click(Sender: TObject);
var
i: Integer;
stList: TStringList;
CurField: string;
begin
if grdClient.SelectedField = nil then
Exit;
CurField := grdClient.SelectedField.FieldName;
stList := TStringList.Create;
stList.Text := Clipboard.AsText;
for i := 0 to stList.Count - 1 do
begin
try
dmSQL.qryGrid.Append;
dmSQL.qryGrid.FieldByName(CurField).AsString := stList.Strings[i];
dmSQL.qryGrid.Post;
except
tsMessages.Show;
mmoMessages.Lines.Add('插入值出错' + CurField + ':' + stList.Strings[i]);
end;
end;
stList.Free;
end;
procedure TMainForm.N57Click(Sender: TObject);
begin
grdClient.Columns[pmFooter.Tag - 1].Footer.ValueType := fvtAvg;
end;
function GetVerInfo(Str: string): Boolean;
var
StrList: TStringList;
StrVer, StrDesc, StrUpdateAddr, StrText: string;
begin
StrUpdateAddr := '';
StrList := TStringList.Create;
try
StrList.Text := Utf8ToAnsi(Str);
Strver := StrList.Values['Ver'];
if (Strver <> '') and (Strver <> GetBuildNo) then
begin
StrDesc := StrList.Values['Desc'];
StrUpdateAddr := StrList.Values['UpdateAddr'];
StrText := format('服务器版本为: %s' + #13#10 + '你的版本为: %s' + #13#10 + '%s', [strver, GetBuildNo, StrDesc]);
ShowMessage(StrText);
end else
ShowMessage('版本一致,您的已经是最新版本了');
finally
StrList.Free;
end;
if StrUpdateAddr <> '' then
ShellExecute(0, 'Open', PChar(StrUpdateAddr), '', '', SW_NORMAL);
end;
procedure TMainForm.N58Click(Sender: TObject);
var
Str: TStringStream;
begin
// Str := TStringStream.Create('');
// try
// try
// IdHTTP1.Get('http://www.wenhaosoft.cn/django/guestbook/checkdbhelperver/', str);
// GetVerInfo(str.DataString);
// except
// ShowMessage('检查新版本失败');
// end;
// finally
// Str.Free;
// end;
end;
procedure TMainForm.miObjectPropertyClick(Sender: TObject);
var
FrmDict: TFrmDict;
begin
if CurEnv.TableCode = '' then
exit;
LoadForm(TFrmDict, [CurEnv.TableCode]);
end;
procedure TMainForm.miHelpFileClick(Sender: TObject);
begin
ShellExecute(0, 'open', PChar(extractfiledir(ParamStr(0)) + '\Index.html'), '', '', SW_NORMAL);
end;
procedure TMainForm.actRunExecute(Sender: TObject);
var
sSQL, sTableCode: string;
i: Integer;
begin
sTableCode := '';
sSQL := Trim(pgcSQLEditor.ActiveEditor.SelText);
if sSQL = '' then
sSQL := Trim(pgcSQLEditor.ActiveEditor.Text);
if dmSQL.IsTableName(sSQL) = 1 then
begin
for i := 0 to lstTable.Items.Count - 1 do
begin
if UpperCase(BaseObjects.Items[i].TableCode) = UpperCase(sSQL) then
begin
lstTable.ItemIndex := i;
lstTable.OnClick(nil);
Exit;
end;
end;
sTableCode := sSQL;
//如果没找到这个表,说明这在表过滤那里过滤表名了,这个时候,也要显示这个表的数据.
if (AppSet.TopLines > 0) and (dmSQL.CurDbType = dbSQLServer2000) then
sSQL := Format('SELECT top %d * FROM %s', [AppSet.TopLines, sSQL]);
if (AppSet.TopLines > 0) and (dmSQL.CurDbType = dbPostgreSQL) then
sSQL := Format('SELECT * FROM %s LIMIT %d', [sSQL, AppSet.TopLines]);
end;
dmSQL.QryGrid.Close;
dmSQL.QryGrid.Filter := '';
dmSQL.QryGrid.Filtered := False;
dmSQL.QryGrid.SQL.Text := sSQL;
ds.DataSet := dmSQL.QryGrid;
dmSQL.QryGrid.Open;
statusbar.Panels[6].Text := inttostr(dmSQL.QryGrid.RecordCount);
statusbar.Panels[8].Text := inttostr(dmSQL.QryGrid.FieldCount);
if dmSQL.QryGrid.PSGetTableName <> '' then
begin
CurEnv.TableCode := dmSQL.QryGrid.PSGetTableName;
if sTableCode <> '' then
dmSQL.TransDBGrid(sTableCode, grdClient)
else
dmSQL.TransDBGrid(CurEnv.TableCode, grdClient);
end;
end;
procedure TMainForm.N1Click(Sender: TObject);
begin
//
end;
procedure TMainForm.actCopyTableCodeExecute(Sender: TObject);
var
i: Integer;
sList: TStringList;
begin
if (lstTable.ItemIndex = 0) or (lstTable.SelCount = 1) then
begin
Clipboard.AsText := CurEnv.TableCode;
pgcSQLEditor.edtSQLViewer.PasteFromClipboard;
ShowMsg('复制到剪切板成功');
end else
begin
sList := TStringList.Create;
try
for i := 0 to lstTable.Items.Count - 1 do
begin
if lstTable.Selected[i] then
begin
sList.Add(lstTable.Items[i]);
end;
end;
Clipboard.AsText := sList.Text;
ShowMsg('复制多行到剪切板成功');
finally
sList.Free;
end;
end;
end;
function TMainForm.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: string; var Params: Variant): Variant;
begin
Result := 0;
if MethodName = 'RANDOMINT' then
begin
Result := Random(StrToInt(VarToStr(Params[0])));
end;
if MethodName = 'FILEEXISTS' then
begin
Result := FileExists(Params[0]);
end;
if MethodName = 'PRINT' then
begin
mmoMessages.Lines.Add(Params[0]);
end;
if MethodName = 'SHOWINFO' then
begin
ShowInfo(Params[0]);
end;
if MethodName = 'SHOWWARNING' then
begin
ShowWarning(Params[0]);
end;
if MethodName = 'SHOWERROR' then
begin
ShowError(Params[0]);
end;
if MethodName = 'YESNOMESSAGE' then
begin
Result := YesNoMessage(Params[0]);
end;
if MethodName = 'INFOMESSAGE' then
begin
InfoMessage(Params[0]);
end;
if MethodName = 'STOPMESSAGE' then
begin
StopMessage(Params[0]);
end;
if MethodName = 'WARNMESSAGE' then
begin
WarnMessage(Params[0]);
end;
if MethodName = 'SUREMESSAGE' then
begin
Result := SureMessage(Params[0]);
end;
if MethodName = 'SHOWLOGTAB' then
begin
pgcDataView.ActivePage := tsMessages;
Result := '';
end;
if MethodName = 'SHOWDATATAB' then
begin
pgcDataView.ActivePage := tsDataView;
Result := '';
end;
if ClassType = TBaseTable then
begin
if MethodName = 'ITEMS.GET' then
Result := Integer(TBaseTable(Instance).Items[Params[0]])
end;
if MethodName = 'GETDATAINTEGER' then
begin
Result := dmSQL.GetDataInteger(Params[0]);
end;
if MethodName = 'GETDICTVALUE' then
begin
Result := dmSQL.GetDict(Params[0], Params[1]);
end;
if MethodName = 'SETDICTVALUE' then
begin
try
dmSQL.SetDict(Params[0], Params[1], Params[2]);
Result := True;
except
Result := False;
end;
end;
if MethodName = 'GETDATASET' then
begin
Result := Integer(dmSQL.GetDataSet(Params[0]));
end;
if MethodName = 'EXECSQL' then
begin
Result := dmSQL.ExecSQL(Params[0]);
end;
if MethodName = 'GETHZPY' then
begin
Result := GetHzPy(Params[0]);
end;
if MethodName = 'GETDATASTRING' then
begin
Result := dmSQL.GetDataString(Params[0]);
end;
// if ClassType = TClipboard then
// begin
// if MethodName = 'ASTEXT' then
// Result := TClipboard(Instance).AsText;
// end;
end;
function TMainForm.GetProp(Instance: TObject; ClassType: TClass;
const PropName: string): Variant;
begin
Result := 0;
if ClassType = TClipboard then
begin
if PropName = 'ASTEXT' then
Result := TClipboard(Instance).AsText;
end
end;
procedure TMainForm.SetProp(Instance: TObject; ClassType: TClass;
const PropName: string; Value: Variant);
begin
if ClassType = TClipboard then
begin
if PropName = 'ASTEXT' then
TClipboard(Instance).AsText := Value;
end
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
if YesNoMessage('您确定要清空当表的全部数据吗?') then
begin
if dmSQL.CurDbType = dbSQLITE3 then
begin
if dmSQL.ExecSQL(Format('DELETE FROM %s', [CurEnv.TableCode])) then
ShowMsg('清除成功')
else
ShowError('清除失败');
end else
begin
if dmSQL.ExecSQL(Format('TRUNCATE TABLE %s', [CurEnv.TableCode])) then
ShowMsg('清除成功')
else
ShowError('清除失败');
end;
end;
end;
procedure TMainForm.SQL1Click(Sender: TObject);
var
FrmExpSQL: TFrmExpSQL;
sTableName, s, InsertFmt: string;
sl: TStringList;
i, iCnt: Integer;
_Qry, _: TDataSetEx;
begin
if lstTable.Items.Count < 1 then
begin
WarnMessage('当前没有表,不能导出');
Exit;
end;
FrmExpSQL := TFrmExpSQL.Create(Self);
FrmExpSQL.ShowModal;
if FrmExpSQL.ModalResult = mrOK then
begin
sl := TStringList.Create;
_Qry := nil;
AddLog('----------开始导出----------');
for iCnt := 0 to lstTable.Items.Count - 1 do
begin
Application.ProcessMessages;
sTableName := lstTable.Items[iCnt];
AddLog('取表数据:[%s]', [sTableName]);
if FrmExpSQL.chkCheckOracleTimeStampValid.Checked then
begin
end;
Application.ProcessMessages;
_Qry := dmSQL.GetDataSet(Format('select * from %s', [sTableName]));
if _Qry = nil then
begin
WarnMessage('导出表异常');
Exit;
end;
//check ident column
if dmSQL.CurDbType = dbSQLSERVER2000 then
begin
if FrmExpSQL.chkIDENTITY.Checked then
begin
_ := dmSQL.GetDataSet(Format('select name from syscolumns where id in (select id from sysobjects where xtype=''U'' and name=''%s'') and status=128', [sTableName]));
if _ = nil then
Exit;
try
if not _.IsEmpty then
begin
for i := 0 to _Qry.FieldCount - 1 do
begin
if LowerCase(_Qry.Fields[i].FieldName) = LowerCase(_.Fields[0].AsString) then
begin
_Qry.Fields[i].Visible := False;
end;
end;
end;
finally
_.Free;
end;
end;
end;
InsertFmt := dmSQL.CreateTableModal(sTableName, _Qry);
InsertFmt := InsertFmt + ';';
try
_Qry.First;
i := 0;
sl.Add(Format('--记录条数:%d', [_Qry.RecordCount]));
if FrmExpSQL.chkTruncTable.Checked then
sl.Add(Format('TRUNCATE TABLE %s;', [sTableName]));
while not _Qry.Eof do
begin
StatusBar.Panels[10].Text := Format('正在导出:%s', [sTableName]);
StatusBar.Panels[11].Text := Format('表:%d/%d', [iCnt, lstTable.Items.Count]);
StatusBar.Panels[12].Text := Format('数据:%d/%d', [_Qry.RecordCount, _Qry.RecNo]);
Application.ProcessMessages;
sl.Add(BuildSqlFromFmt(InsertFmt, _Qry));
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
_Qry.Next;
end;
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
if FrmExpSQL.rbSQLFile.Checked then
begin
sl.SaveToFile(FrmExpSQL.edtSQLExp.Text + '\' + sTableName + '.sql');
sl.Clear;
end;
finally
_Qry.Free;
end;
end;
StatusBar.Panels[10].Text := '';
StatusBar.Panels[11].Text := '';
StatusBar.Panels[12].Text := '';
if not FrmExpSQL.rbSQLFile.Checked then
sl.SaveToFile(FrmExpSQL.edtSQLExp.Text);
AddLog('----------导出完成----------');
ShowMsg('生成完毕');
sl.Free;
end;
FrmExpSQL.Free;
end;
procedure TMainForm.AddLog(Msg: string);
begin
mmoMessages.Lines.Add(FormatDateTime('YYYY-MM-DD HH:MM:SS', Now) + ' ' + Msg);
end;
procedure TMainForm.AddLog(Msg: string; Value: array of const);
begin
AddLog(Format(Msg, Value));
end;
procedure TMainForm.actEscExecute(Sender: TObject);
begin
if (grdClient.DataSource.DataSet <> nil) and grdClient.DataSource.DataSet.Active then
begin
if grdClient.DataSource.DataSet.Filtered then
begin
grdClient.DataSource.DataSet.Filter := '';
grdClient.DataSource.DataSet.Filtered := False;
Exit;
end;
end;
Close;
end;
procedure TMainForm.tsMessagesShow(Sender: TObject);
begin
mmoMessages.SetFocus;
end;
procedure TMainForm.DisplayTableStruct(TableCode: string);
var
FQry: TDataSetEx;
i, j: Integer;
s, sValue, sSQL: string;
begin
if dmSQL.CurDbType = dbPostgreSQL then
begin
sSQL := Format('SELECT * FROM information_schema.columns WHERE table_name=''%s'' ORDER BY ordinal_position', [TableCode]);
FQry := dmSQL.GetDataSet(sSQL);
if FQry = nil then
begin
WarnMessage('查询表结构出错');
Exit;
end;
try
FQry.First;
QryTableStruct.DisableControls;
j := QryTableStruct.RecNo;
QryTableStruct.EmptyTable;
QryTableStruct.Close;
QryTableStruct.Open;
while not FQry.Eof do
begin
QryTableStruct.Append;
for i := 0 to QryTableStruct.FieldCount - 1 do
begin
if (QryTableStruct.Fields[i].FieldName <> 'column_displayname') then
begin
sValue := FQry.FieldByName(QryTableStruct.Fields[i].FieldName).AsString;
QryTableStruct.FieldByName(QryTableStruct.Fields[i].FieldName).AsString := sValue;
end;
if (QryTableStruct.Fields[i] <> nil) and (QryTableStruct.Fields[i].FieldName = 'column_default') then
begin
s := QryTableStruct.Fields[i].AsString;
if Pos('::character varying', s) >= 1 then
begin
s := Copy(s, 1, Pos('::character varying', s) - 1);
end;
if Pos('nextval', s) >= 1 then
begin
s := 'serial';
end;
QryTableStruct.Fields[i].AsString := s;
end;
end;
QryTableStruct.FieldByName('column_displayname').AsString := dmSQL.GetDict(TableCode, FQry.FieldByName('column_name').AsString);
QryTableStruct.Post;
FQry.Next;
end;
QryTableStruct.RecNo := j;
QryTableStruct.EnableControls;
finally
FQry.Free;
end;
end;
end;
procedure TMainForm.grdTableStructDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
var
sHighLight, sField: string;
begin
if (QryTableStruct.FieldByName('column_default').AsString <> '') and (QryTableStruct.FieldByName('is_nullable').AsString = 'NO') then
begin
grdTableStruct.Canvas.Font.Color := $008080FF;
end;
sHighLight := Trim(edtHighLightField.Text);
if sHighLight <> '' then
begin
sField := QryTableStruct.FieldByName('column_name').AsString;
if pos(sField, sHighLight) > 0 then
grdTableStruct.Canvas.Brush.Color := $008080FF;
end;
grdTableStruct.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
procedure TMainForm.N14Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.Undo;
end;
procedure TMainForm.N24Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.Redo;
end;
procedure TMainForm.N19Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.CutToClipboard;
end;
procedure TMainForm.N6Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.CopyToClipboard;
end;
procedure TMainForm.N10Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.PasteFromClipboard;
end;
procedure TMainForm.N11Click(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.SelectAll;
end;
procedure TMainForm.N23Click(Sender: TObject);
var
s: string;
begin
if Length(pgcSQLEditor.edtSQLViewer.SelText) > 0 then
begin
s := pgcSQLEditor.edtSQLViewer.SelText;
s := AnsiReplaceText(s, '''''', '''');
if (Length(s) > 0) and (s[1] = '''') then
s := Copy(s, 2, Length(s));
if (Length(s) > 0) and (s[Length(s)] = '''') then
s := Copy(s, 1, length(s) - 1);
pgcSQLEditor.edtSQLViewer.SelText := s;
end else
begin
s := pgcSQLEditor.edtSQLViewer.Text;
s := AnsiReplaceText(s, '''''', '''');
if (Length(s) > 0) and (s[1] = '''') then
s := Copy(s, 2, Length(s));
if (Length(s) > 0) and (s[Length(s)] = '''') then
s := Copy(s, 1, length(s) - 1);
pgcSQLEditor.edtSQLViewer.Text := s;
end;
end;
procedure TMainForm.N25Click(Sender: TObject);
var
s, sSQL: string;
i: Integer;
begin
if QryTableStruct.FieldByName('udt_name').AsString <> 'varchar' then
begin
WarnMessage('只能对varchar类型的字段设置长度');
Exit;
end;
if InputQuery('字段长度', '请输入当前字段的长度', s) then
begin
if not TryStrToInt(s, i) then
begin
WarnMessage('必须输入一个大于0小于100的整数');
Exit;
end;
if (i < 1) or (i > 100) then
begin
WarnMessage('必须输入一个大于0小于100的整数');
Exit;
end;
end;
sSQL := Format('ALTER TABLE %s ALTER %s type varchar(%s);', [CurEnv.TableCode, QryTableStruct.FieldByName('column_name').AsString, s]);
AddLog(sSQL);
if dmSQL.ExecSQL(sSQL) then
ShowInfo('更改成功')
else
ShowWarning('更改失败');
DisplayTableStruct(CurEnv.TableCode);
end;
procedure TMainForm.N28Click(Sender: TObject);
var
sFieldCode, sSQL: string;
begin
if QryTableStruct.IsEmpty then
Exit;
sFieldCode := QryTableStruct.FieldByName('column_name').AsString;
if SureMessage('您确定要删除表[%s]的字段[%s]吗?', [CurEnv.TableCode, sFieldCode]) then
begin
sSQL := Format('ALTER TABLE %s DROP %s;', [CurEnv.TableCode, sFieldCode]);
AddLog(sSQL);
if dmSQL.ExecSQL(sSQL) then
ShowInfo('删除字段成功,请刷新数据库连接')
else
ShowWarning('删除失败');
end;
DisplayTableStruct(CurEnv.TableCode);
end;
procedure TMainForm.N29Click(Sender: TObject);
var
sFieldCode: string;
begin
if QryTableStruct.IsEmpty then
Exit;
sFieldCode := QryTableStruct.FieldByName('column_name').AsString;
if YesNoMessage('您确定要给表[%s]的字段[%s]增加唯一索引吗?') then
if dmSQL.ExecSQL(Format('CREATE UNIQUE index idx_u_%s_%s ON %s(%s)', [CurEnv.TableCode, sFieldCode, CurEnv.TableCode, sFieldCode])) then
ShowInfo('建立唯一索引成功')
else
ShowWarning('建立唯一索引失败');
DisplayTableStruct(CurEnv.TableCode);
end;
procedure TMainForm.SQL2Click(Sender: TObject);
var
i: Integer;
x, y: Integer;
sSQL: string;
ARect: TRect;
begin
for i := 0 to QueryBuilder.Tables.Count - 1 do
begin
ARect.Left := QueryBuilder.Tables.Table[i].Left;
ARect.Top := QueryBuilder.Tables.Table[i].Top;
ARect.Right := QueryBuilder.Tables.Table[i].Width;
ARect.Bottom := QueryBuilder.Tables.Table[i].Height;
sSQL := Format('update sys_table set position=''%s'' where tablecode=''%s''', [RectToStr(ARect), QueryBuilder.Tables.Table[i].TableName]);
dmSQL.ExecSQL(sSQL);
end;
ShowInfo('保存成功');
end;
procedure TMainForm.N30Click(Sender: TObject);
var
s: string;
c: Currency;
begin
if YesNoMessage('您确定要取消默认值吗? ') then
if dmSQL.ExecSQL(Format('ALTER TABLE %s ALTER %s DROP DEFAULT', [CurEnv.TableCode, QryTableStruct.FieldByName('column_name').AsString])) then
ShowInfo('修改成功')
else
ShowWarning('修改失败');
DisplayTableStruct(CurEnv.TableCode);
end;
procedure TMainForm.N33Click(Sender: TObject);
var
s: string;
c: Currency;
begin
if QryTableStruct.FieldByName('udt_name').AsString = 'timestamp' then
begin
if YesNoMessage('您确定要设置默认值为当前时间吗? ') then
if dmSQL.ExecSQL(Format('ALTER TABLE %s ALTER %s SET DEFAULT current_timestamp', [CurEnv.TableCode, QryTableStruct.FieldByName('column_name').AsString])) then
ShowInfo('修改成功')
else
ShowWarning('修改失败')
end;
if QryTableStruct.FieldByName('udt_name').AsString = 'numeric' then
begin
s := '';
if not InputQuery('数值类默认值', '请输入一个数值', s) then
begin
Exit;
end;
if not TryStrToCurr(s, c) then
begin
WarnMessage('您必须输入一个数字做为默认值');
Exit;
end;
if YesNoMessage('您确定要设置默认值为[%s]吗? ', [s]) then
if dmSQL.ExecSQL(Format('ALTER TABLE %s ALTER %s SET DEFAULT %s', [CurEnv.TableCode, QryTableStruct.FieldByName('column_name').AsString, s])) then
ShowInfo('修改成功')
else
ShowWarning('修改失败')
end;
if QryTableStruct.FieldByName('udt_name').AsString = 'varchar' then
begin
s := '';
if not InputQuery('字符串类默认值', '请输入一个字符串', s) then
begin
Exit;
end;
if YesNoMessage('您确定要设置默认值为[%s]吗? ', [s]) then
if dmSQL.ExecSQL(Format('ALTER TABLE %s ALTER %s SET DEFAULT ''%s''', [CurEnv.TableCode, QryTableStruct.FieldByName('column_name').AsString, s])) then
ShowInfo('修改成功')
else
ShowWarning('修改失败')
end;
DisplayTableStruct(CurEnv.TableCode);
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := SureMessage('您确定要退出吗?')
end;
procedure TMainForm.upclckspltr1Moved(Sender: TObject);
begin
AppSet.SetConfig('Main', 'BaseListWidth', Format('%d', [pnlLeft.Width]));
end;
procedure TMainForm.N44Click(Sender: TObject);
begin
LoadForm(TrmCheckConstrant);
end;
procedure TMainForm.N45Click(Sender: TObject);
begin
if grdClient.SelectedField <> nil then
begin
QryTableStruct.Locate('column_name', grdClient.SelectedField.FieldName, [loCaseInsensitive, loPartialKey]);
tsTableStruct.Show;
end;
end;
procedure TMainForm.N48Click(Sender: TObject);
var
sFieldName: string;
i: Integer;
begin
sFieldName := QryTableStruct.FieldByName('column_name').AsString;
for i := 0 to grdClient.Columns.Count - 1 do
begin
if grdClient.Columns[i].FieldName = sFieldName then
begin
grdClient.SelectedIndex := i;
Break;
end;
end;
tsDataView.Show;
end;
procedure TMainForm.SetGridEhColumnSortMemTable(ADOQuery: TMemTableEh;
Column: TColumnEh);
var
bk: Tbookmark;
begin
bk := ADOQuery.GetBookmark;
try
case Column.Title.SortMarker of //列排序
smNoneEh:
begin
Column.Title.SortMarker := smDownEh;
ADOQuery.SortByFields(Column.FieldName + ' DESC'); // ADOQuery.SortedFields := Column.FieldName + ' DESC';
end;
smDownEh:
begin
Column.Title.SortMarker := smUpEh;
ADOQuery.SortByFields(Column.FieldName + ' ASC');
end;
smUpEh:
begin
Column.Title.SortMarker := smDownEh;
ADOQuery.SortByFields(Column.FieldName + ' DESC');
end;
end;
ADOQuery.GotoBookmark(bk);
finally
ADOQuery.FreeBookmark(bk);
end;
end;
procedure TMainForm.grdTableStructTitleClick(Column: TColumnEh);
begin
SetGridEhColumnSortMemTable(QryTableStruct, Column);
end;
function CreateTableModalEx(FieldCount: Integer; TableName: string; Dataset: TDataSet): string;
var
First_Str: string;
s, End_Str: string;
i: integer;
begin
First_Str := 'insert into ' + tablename + '(' + #13#10;
End_Str := ' Values(' + #13#10;
for i := 0 to Dataset.FieldDefs.Count - 1 do
begin
if Dataset.Fields[i].Visible then
begin
s := '';
if (i + 1) mod FieldCount = 0 then
s := #13#10;
if Dataset.FieldDefs[i].DataType in [ftString, ftDate, ftTime, ftDateTime, ftMemo, ftFmtMemo, ftFixedChar, ftWideString] then
begin
First_Str := First_Str + Dataset.FieldDefs[i].DisplayName + ',' + s;
End_Str := End_Str + '''' + '<' + Dataset.FieldDefs[i].DisplayName + '>' + '''' + ',' + s;
end;
if Dataset.FieldDefs[i].DataType in [ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftBytes, ftGraphic, ftLargeInt, ftBlob] then
begin
First_Str := First_Str + Dataset.FieldDefs[i].DisplayName + ',' + s;
End_Str := End_Str + '<' + Dataset.FieldDefs[i].DisplayName + '>' + ',' + s;
end;
end;
end;
Delete(First_Str, length(First_Str), 1);
Delete(End_Str, length(End_Str), 1);
First_Str := First_Str + ')';
End_Str := End_Str + ')';
Result := First_Str + End_Str;
end;
procedure TMainForm.N49Click(Sender: TObject);
var
s, InsertFmt: string;
sl: TStringList;
i: Integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
s := '10';
if not InputQuery('请输入多少列有一个回车符', '列数', s) then
Exit;
if not TryStrToInt(s, i) then
begin
WarnMessage('请输入一个整数');
Exit;
end;
InsertFmt := CreateTableModalEx(i, CurEnv.TableCode, dmSQL.QryGrid);
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
sl := TStringList.Create;
try
dmSQL.qryGrid.First;
i := 0;
sl.Add(Format('--%d', [dmSQL.QryGrid.RecordCount]));
if not AppSet.AddTruncate then
s := '--';
s := s + 'DELETE FROM ' + CurEnv.TableCode;
if AppSet.AddSemicolon then
s := s + ';';
sl.Add(s);
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
while not dmSQL.qryGrid.Eof do
begin
sl.Add(BuildSqlFromFmt(InsertFmt, dmSQL.qryGrid));
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.Next;
end;
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
Clipboard.AsText := sl.Text;
ShowInfo('已复制数据集Insert语句到剪切板');
finally
sl.Free;
end;
end;
procedure TMainForm.NULL1Click(Sender: TObject);
var
i: Integer;
bISALLNULL: Boolean;
begin
dmSQL.QryGrid.DisableControls;
for i := 0 to dmSQL.QryGrid.FieldCount - 1 do
begin
bISALLNULL := True;
dmSQL.QryGrid.First;
while not dmSQL.QryGrid.Eof do
begin
if not dmSQL.QryGrid.Fields[i].IsNull then
begin
bISALLNULL := False;
Break;
end;
dmSQL.QryGrid.Next;
end;
if bISALLNULL then
dmSQL.qryGrid.Fields[i].Visible := false;
end;
dmSQL.QryGrid.EnableControls;
end;
procedure TMainForm.grdClientAdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
var Params: TColCellParamsEh; var Processed: Boolean);
begin
if (Column.Field <> nil) and Column.Field.IsNull then
Params.Text := '<NULL>';
end;
procedure TMainForm.N54Click(Sender: TObject);
begin
if grdClient.SelectedField <> nil then
begin
grdClient.SumList.Active := False;
grdClient.FindFieldColumn(grdClient.SelectedField.FieldName).Footer.ValueType := fvtSum;
grdClient.SumList.Active := True;
end;
end;
procedure TMainForm.N60Click(Sender: TObject);
begin
if grdClient.SelectedField <> nil then
begin
grdClient.SumList.Active := False;
grdClient.FindFieldColumn(grdClient.SelectedField.FieldName).Footer.ValueType := fvtAvg;
grdClient.SumList.Active := True;
end;
end;
procedure TMainForm.miInsertValueClick(Sender: TObject);
var
s, sSQL, InsertFmt, InsertValue: string;
sl: TStringList;
i: Integer;
begin
if not dmSQL.QryGrid.Active then
Exit;
InsertFmt := dmSQL.CreateInsertFieldModal(CurEnv.TableCode, dmSQL.QryGrid);
sl := TStringList.Create;
try
dmSQL.qryGrid.First;
i := 0;
sl.Add(Format('--%d', [dmSQL.QryGrid.RecordCount]));
if not AppSet.AddTruncate then
s := '--';
s := s + 'DELETE FROM ' + CurEnv.TableCode;
if AppSet.AddSemicolon then
s := s + ';';
sl.Add(s);
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
sl.Add(InsertFmt);
InsertValue := dmSQL.CreateInsertValueModal(CurEnv.TableCode, dmSQL.QryGrid);
while not dmSQL.qryGrid.Eof do
begin
sSQL := BuildInsertFieldSqlFromFmt(InsertValue, dmSQL.qryGrid);
sl.Add(sSQL + ',');
Inc(i);
if (i mod AppSet.LinesForCommit) = 0 then
sl.Add(AppSet.CommitCmd);
dmSQL.qryGrid.Next;
end;
if AppSet.AddSemicolon then
InsertFmt := InsertFmt + ';';
if AppSet.LinesForCommit > 0 then
sl.Add(AppSet.CommitCmd);
s := Trim(sl.Text);
Delete(s, length(s), 1);
s := s + ';';
Clipboard.AsText := s;
ShowInfo('已复制数据集Insert语句到剪切板');
finally
sl.Free;
end;
end;
procedure TMainForm.miWordWrapClick(Sender: TObject);
begin
pgcSQLEditor.edtSQLViewer.WordWrap := miWordWrap.Checked;
end;
procedure TMainForm.N56Click(Sender: TObject);
begin
grdClient.SelectedRows.SelectAll;
end;
procedure TMainForm.N68Click(Sender: TObject);
begin
grdClient.SelectedRows.Delete;
end;
procedure TMainForm.N59Click(Sender: TObject);
begin
if dmSQL.SaveTableJson(grdClient, CurEnv.TableCode) then
ShowInfo('保存成功');
end;
procedure TMainForm.actSQLEditorSaveExecute(Sender: TObject);
begin
if CurSQLFile = '' then
begin
dlgSave.InitialDir := AppPath + 'SQL';
if dlgSave.Execute then
begin
pgcSQLEditor.ActiveEditor.Lines.SaveToFile(dlgSave.FileName);
end;
end else
begin
pgcSQLEditor.ActiveEditor.Lines.SaveToFile(CurSQLFile);
end;
pgcSQLEditor.edtSQLViewer.Modified := False;
end;
procedure TMainForm.miSQL4Click(Sender: TObject);
begin
LoadSQLFavorites;
end;
end.
Delphi
1
https://gitee.com/lvhongqing/dbhelper.git
git@gitee.com:lvhongqing/dbhelper.git
lvhongqing
dbhelper
dbhelper
master

搜索帮助