Kuunda programu ya seva ya mteja huko Delphi. Kuunda seva ya mteja huko Delphi

Kwa hivyo kwanza kuhusu sehemu ya seva Kitambulisho cha seva(alamisho Seva za Indy) Ili kutumia uwezo wa seva, kijenzi hiki lazima kiwekwe kwenye fomu (sehemu isiyoweza kuonyeshwa). Wakati wa kusanidi sehemu, mali zifuatazo zinafaa:

  • Inatumika - inawasha au kuzima seva (chaguo-msingi ya Uongo);
  • Bindings - husanidi soketi za seva (huziunganisha kwenye bandari maalum ya kompyuta, hukuruhusu kuweka anuwai ya anwani za IP na bandari za mteja kwa kutumia kisanduku cha mazungumzo cha mipangilio ya mali. Kufunga;
  • ListenQueue - thamani ya nambari ambayo hupunguza idadi ya juu ya maombi ya uunganisho kutoka kwa wateja kwenye foleni;
  • MaxConnections - inakuwezesha kupunguza idadi ya juu ya wateja waliounganishwa kwenye seva;

Wacha tuangalie kwa karibu kusanidi soketi za seva kwa kutumia mali ya Bindings. Kwa hiyo, katika Mtini. Kielelezo cha 1 kinaonyesha jinsi ya kutumia kisanduku cha mazungumzo ya Sifa Kufunga sanidi seva kutumikia wateja na anwani zozote za IP, wakati tundu la seva inashikamana na bandari 12340.

Mchele. 1. Kuweka mali Kufunga.

Katika hatua hii, unaweza kukamilisha usanidi wa seva (ingawa si uwezo wote wa kijenzi cha IdTCPServer unatumika hapa). Kazi kuu ya seva inapochakata maombi ya mteja inaweza kutekelezwa katika kidhibiti tukio cha OnExecute. Kidhibiti hiki kimepitishwa rejeleo la kitu cha TIdContext - nyuzi inayohusishwa na mteja iliyounganishwa kwenye seva. Kupitia kitu hiki (kwa usahihi, mali yake ya Uunganisho), unaweza kupokea na kutuma data, na pia kupokea na kuweka vigezo vingi vya uunganisho muhimu. Mfano wa kwanza wa kutumia kipengee cha TIdContext wakati wa kuchakata ombi la mteja unaonyeshwa katika Orodha ya 1.

Sasa hebu tuangalie jinsi ya kusanidi mteja (IdTCPClient - tab Wateja wa Indy) ili iweze kuingiliana na seva yetu. Ili kutumia sehemu ya mteja wa TCP, weka tu kwenye fomu (sehemu pia haijaonyeshwa).

Baada ya hayo, kwa kiwango cha chini, unahitaji kusanidi mali zifuatazo (zilizobaki zimetajwa kama inahitajika katika mifano hapa chini):

  • Jeshi - jina au anwani ya IP ya kompyuta ambayo seva inafanya kazi;
  • Bandari - nambari ya bandari ambayo tundu la seva limeunganishwa.

Kwa ujumla, si lazima kusanidi hata mali hizi katika hatua ya maendeleo ya fomu. Programu inaweza kubadilika zaidi ikiwa, kwa mfano, mtumiaji anapewa fursa ya kuchagua (au kuingiza) jina au anwani ya seva.

Ubadilishanaji wa data rahisi

Wakati wa kuanza kufanya kazi na vipengele vilivyoelezwa katika sehemu iliyopita Kitambulisho cha seva Na IdTCPClient fikiria kuunda rahisi maombi ya seva ya mteja, mteja na sehemu za seva ambazo hufanya kazi zifuatazo.

  • Maombi ya Mteja inaunganisha kwenye seva na kuituma kamba iliyoingizwa na mtumiaji, inasubiri jibu, inaonyesha maandishi yaliyopokelewa kutoka kwa seva, na hutenganisha kutoka kwa seva.
  • Programu ya seva inapokea kamba kutoka kwa programu ya mteja na kutuma jibu (pia maandishi), baada ya hapo inafunga muunganisho. Zaidi ya hayo, idadi ya wateja wanaohudumiwa huhesabiwa na anwani ya IP ya kompyuta ambayo ombi la mwisho lilitoka inakumbukwa.

Utekelezaji wa seva na maombi ya mteja kwa upande wetu ni rahisi sana. Mradi wa maombi ya seva unaitwa RahisiServer. Mwonekano Fomu ya seva (wakati programu inaendeshwa) inaonyeshwa kwenye Mtini. 2.

Mchele. 2. Mwonekano seva rahisi

Sehemu ya maandishi ( Hariri) yenye idadi ya maombi yaliyochakatwa inaitwa txtCount , na sehemu ya maandishi yenye anwani ya kompyuta iliyotumika mara ya mwisho inaitwa txtFrom . Kazi nzima ya seva ni kuchakata tukio la Tekeleza kwa sehemu hiyo Kitambulisho cha seva iliyowekwa kwenye fomu (ambatisha kijenzi hiki kwenye bandari 12340 na uweke Mali Inayotumika kuwa Kweli) (Orodha 1).

Kuorodhesha 1. Utekelezaji rahisi wa seva

Utaratibu TForm1.FormCreate(Mtumaji: TObject); sehemu ya kuanza:= TcriticalSection.Create; mwisho; utaratibu TForm1.IdTCPServer1Execute(AContext: TIdContext); var strText: Kamba; anza //Pokea mfuatano kutoka kwa mteja strText:= AContext.Connection.Socket.ReadLn; //Respond AContext.Connection.Socket.WriteLn("Ilichukua mstari: " + strText); //Sasisha taarifa kwenye fomu ya seva (seva ina nyuzi nyingi, // kwa hivyo tunatumia sehemu ya ulandanishi.Enter; Inc(iliyochakatwa, 1); txtCount.Text:= IntToStr(processed); txtFrom.Text:= AContext .Connection.Socket.Binding.PeerIP;sehemu.Ondoka;//Funga muunganisho na mtumiaji AContext.Connection.Tenganisha; mwisho;

Wakati wa kujibu mteja, seva inarudia tu mstari uliopokea kutoka kwake na kuongeza ya maandishi "Imekubaliwa:" hadi mwanzo wa mstari.

Kuchambua orodha 1, unaweza kuona kwamba hata katika seva rahisi zaidi inayohusika, tulilazimika kutumia maingiliano wakati wa kusasisha mwonekano wa fomu kwa kutumia sehemu muhimu (lazima uongeze jina la moduli ya SyncObjs kwenye sehemu ya matumizi).

Sasa hebu tuangalie utekelezaji wa sehemu ya mteja (mradi RahisiClient) Muonekano wa maombi ya mteja unaonyeshwa kwenye Mtini. 2.

Mchele. 2. Muonekano wa mteja

Kwa kawaida, kwa maombi ya mteja kufanya kazi, mfano wa sehemu huwekwa kwenye fomu IdTCPClient(jina lake ni IdTCPClient1). Sifa ya Bandari ya sehemu hii inapaswa kuwekwa kuwa 12340. Sehemu ya maandishi ( Hariri) kuingiza mfuatano utakaotumwa kwa mtu asiye seva, aitwaye txtMessage . Sehemu ya maandishi ( Hariri) ambamo jina au anwani ya seva imeingizwa inaitwa txtServer . Sehemu iliyo na mistari ya majibu ( Memo) ina jina txtResults.

Kazi zote za maombi ya mteja hufanywa kwa kubofya kitufe Kushughulikia. Maandishi ya kidhibiti sambamba yametolewa orodha 2.

Kuorodhesha 2. Utekelezaji rahisi wa mteja

Utaratibu TForm1.Button1Click(Mtumaji: TObject); anza //Unganisha kwenye seva na uitume amri iliyoingia IdTCPClient1.Host:= txtServer.Text; IdTCPClient1.Unganisha; IdTCPClient1.Socket.WriteLn(txtMessage.Text); txtMessage.Text:= ""; //Subiri jibu na ufunge muunganisho txtResults.Lines.Append(IdTCPClient1.Socket.ReadLn); IdTCPClient1.Tenganisha; mwisho;

Hiyo ndiyo yote, sasa unaweza kuendesha seva na wateja (kwa idadi ya kiholela ya kompyuta) na uangalie matokeo ya kazi zao. Kumbuka tu kuanza seva kabla ya kuipata kwa kutumia programu ya mteja.

Chanzo. Imetengenezwa kwenye Delphi XE.

Kufuatilia kompyuta kwenye mtandao (IdTCPServer, IdTCPClient)

Sasa hebu tuangalie kesi ya matumizi ya kuvutia zaidi vipengele vya mtandao Kitambulisho cha seva Na IdTCPCLient, ambayo inaweza kuwa na manufaa kwa watu wanaohusika katika utawala wa kompyuta za mtandao.

Programu ya seva imezinduliwa awali kwenye kompyuta inayofuatiliwa. Katika mfano huu, programu ya seva inaruhusu programu ya mteja kupata habari ifuatayo juu ya kompyuta ambayo (programu ya seva) inafanya kazi:

  • azimio la kufuatilia;
  • kina cha rangi kwa mfuatiliaji;
  • nakala kamili ya skrini;
  • nakala ya skrini, iliyopunguzwa (au iliyopanuliwa) kwa saizi maalum.

Ili kupata habari iliyoainishwa, programu ya mteja lazima itume maadili yafuatayo kwa seva:

  • pata_upana_wa_skrini- kupata upana na pata_screen_urefu- kupata urefu wa skrini katika saizi;
  • pata_rangi_za_skrini- kupata thamani ya kina cha rangi iliyowekwa kwa kufuatilia (bits kwa dot);
  • pata_skrini- kupata nakala ya ukubwa kamili wa skrini;
  • get_screen: X, Y- kupata nakala ya skrini iliyopunguzwa kwa ukubwa X x Y.

Kwanza, hebu tuangalie utekelezaji wa seva (mradi SpyServer) Nambari zote zinazotoa uendeshaji wa seva, iliyowekwa kwenye moduli Unit1.pas fomu Fomu ya 1. Kidhibiti cha ombi la mteja, utaratibu mkuu wa seva, umeonyeshwa katika Orodha ya 3.

Kuorodhesha 3. Kidhibiti cha ombi la mteja

Utaratibu TForm1.IdTCPServer1Execute(Thread: TIdPeerThread); var strText: Kamba; upana, urefu, i: Nambari kamili; dc:HDC; anza //pokea mfuatano kutoka kwa mteja strText:= AThread.Connection.ReadLn; //amua nini kifanyike ikiwa strText = "get_screen_height" kisha //rudisha urefu wa skrini AThread.Connection.WriteInteger(Screen.Height) vinginevyo ikiwa strText = "get_screen_width" kisha //rudisha upana wa skrini AThread.Connection.WriteInteger (Screen. Width) vinginevyo ikiwa strText = "get_screen_colors" kisha anza //rejesha idadi ya biti kwa kila nukta dc:= GetDC(0); AThread.Connection.WriteInteger(GetDeviceCaps(dc, BITSPIXEL)); ReleaseDC(0, dc) itaisha vinginevyo ikiwa strText = "get_screen" kisha //rejesha nakala ya ukubwa kamili ya skrini SendScreen(Screen.Width, Screen.Height, AThread.Connection) vinginevyo anza //mfuatano kama "get_screen: x, y" // Wacha tubaini thamani za urefu na upana zinazopitishwa na mtumiaji strText:= Copy(strText, 12, Length(strText) - 11); i:= Pos(",", strText); // upana wa nafasi ya koma:= StrToInt(Copy(strText, 1, i - 1)); urefu:= StrToInt(Copy(strText, i+1, Length(strText) - i)); // rudisha nakala ya skrini SendScreen(upana, urefu, AThread.Connection); mwisho; mwisho;

Utaratibu wa SendScreen unaotumika katika Orodha ya 3, ambao hutuma nakala ya skrini kwa mteja, unaonyeshwa katika Orodha ya 4.

Kuorodhesha 4. Kupiga picha ya skrini

// utaratibu huchukua nakala ya skrini, huleta // picha inayotokana na ukubwa maalum na kutuma picha // iliyogeuzwa kwa utaratibu wa programu ya mteja SendScreen (upana1: Integer; urefu1: Integer; Muunganisho: TIdTCPServerConnection); var ScreenCopy: TCanvas; gr: TBitmap; mkondo: TMemoryStream; rcDest, rcChanzo: TRect; anza rcDest:= Rect(0,0,width1,height1); // saizi ya mwisho ya picha rcSource:= Screen.DesktopRect; // saizi ya asili picha //tengeneza turubai na uiambatanishe na muktadha wa Eneo-kazi ScreenCopy:= TCanvas.Create; ScreenCopy.Handle:= GetDC(0); //tengeneza kitu cha kuhifadhi nakala ya skrini na kunakili picha gr:= TBitmap.Create; gr.Urefu:= urefu1; gr.Upana:= upana1; gr.Canvas.CopyRect(rcDest, ScreenCopy, rcSource); ReleaseDC(0, ScreenCopy.Handle); //hifadhi picha kwenye mkondo wa data:= TMemoryStream.Create; gr.SaveToStream(mkondo); // tuma picha kwa Connection ya mteja.WriteStream(mkondo, kweli, kweli); mkondo.Wazi; mkondo.Bure; gr.Bure; mwisho;

Kama unaweza kuona, hata zaidi operesheni tata seva inayohusika - kunakili picha - inatekelezwa kwa urahisi kwa sababu ya uwepo wa darasa la kawaida kama TMemoryStream.

Sehemu Kitambulisho cha seva(inayoitwa IdTCPServer1) katika mfano huu imeambatishwa kwa mlango 12341 (kumbuka pia kuweka kipengele Active = True).

Sasa kuhusu utekelezaji wa maombi ya mteja (mradi SpyClient) Kuonekana kwa fomu ya mteja (Fomu1) wakati wa operesheni inavyoonyeshwa kwenye Mtini. 3 (ni wazi kwamba mtumiaji wa kompyuta iliyofuatiliwa amepoteza tu mchezo wa Minesweeper).

Mchele. 3

Ufafanuzi, majina, na thamani za sifa zilizosanidiwa kwa mikono za vipengele muhimu vya fomu ya mteja zimeonyeshwa kwenye Jedwali la 1.

Jedwali 1. Sehemu kuu za fomu ya mteja wa kufuatilia na mali zao

Programu ya mteja huanza na muunganisho kwenye seva. Msimbo wa operesheni hii umeonyeshwa katika Orodha ya 5.

Kuorodhesha 5. Kuunganisha kwa seva

Utaratibu TForm1.cmbConnectClick(Mtumaji: TObject); anza ikiwa cmbConnect.Caption = "Unganisha" kisha anza ikiwa txtServer.Text = "" kisha //no jina la seva limeingia MessageDlg("Ingiza jina la mashine ya seva katika sehemu ya maandishi", mtInformation, , 0) itaanza // unganisha kwa seva IdTCPClient1.Host:= txtServer.Text; jaribu IdTCPClient1.Connect; isipokuwa MessageDlg("Haiwezi kuunganisha kwenye seva maalum", mtError, , 0); Utgång; mwisho; mwisho mwisho mwingine //kata kutoka kwa seva IdTCPClient1.Tenganisha; mwisho;

Ikiwa muunganisho kwenye seva utafaulu, kidhibiti cha TForm1.IdTCPClient1Connected kitatekelezwa, kikitayarisha programu ya mteja kwa maombi ya data ya mara kwa mara kutoka kwa seva (Orodha 6).

Kuorodhesha 6. Vitendo vinavyofanywa wakati wa kuunganisha kwenye seva

Utaratibu TForm1.IdTCPClient1Connected(Mtumaji: TObject); anza txtServer.Imewezeshwa:= Si kweli; cmbConnect.Maelezo:= "Tenganisha"; //anza mara kwa mara kuomba data kutoka kwa seva Timer1.Imewezeshwa:= Kweli; // tekeleza ombi la kwanza bila kungoja kipima saa kuwasha Timer1Timer(nil); mwisho;

Wakati wa kukata muunganisho kutoka kwa seva, vitendo pia hufanywa ambavyo vinasimamisha maombi ya data ya mara kwa mara na kumweka mteja katika hali ya kusubiri muunganisho ( hali ya awali programu) (Orodha 7).

Kuorodhesha 7. Vitendo wakati wa kukata muunganisho kutoka kwa seva

Utaratibu TForm1.IdTCPClient1Imekatishwa (Mtumaji: TObject); start txtServer.Enabled:= Kweli; cmbConnect.Maelezo:= "Unganisha"; Timer1.Imewashwa:= Siyo; mwisho;

Sehemu ngumu zaidi ya programu ya mteja ni kuchakata data iliyotumwa na seva. Programu ya mteja huomba data ya kipima muda na kuchakata data iliyopokelewa kama inavyoonyeshwa katika Orodha ya 8.

Utaratibu TForm1.Timer1Timer(Mtumaji: TObject); var mkondo: TMemoryStream; anza //omba data kutoka kwa seva kuhusu kompyuta inayofuatiliwa kwa kutumia (IdTCPClient1) kuanza //...permission WriteLn("get_screen_width"); AndikaLn("get_screen_height"); lblResolution.Caption:= IntToStr(ReadInteger) + "x" + IntToStr(ReadInteger); //... kina cha rangi WriteLn("get_screen_colors"); lblColors.Maelezo:= IntToStr(ReadInteger); //... nakala ya skrini //..... chaguo la 1 - kunakili skrini bila ukandamizaji //WriteLn("get_screen"); //..... Chaguo la 2 - mbano kwenye upande wa seva WriteLn("get_screen:" + IntToStr(imgScreen.Width) + "," + IntToStr(imgScreen.Height)); //....pata mtiririko wa data:= TMemoryStream.Create; ReadStream(mkondo); mkondo.Nafasi:= 0; //....unda picha imgScreen.Picture.Bitmap.LoadFromStream(mkondo); mkondo.Wazi; mkondo.Bure; mwisho; mwisho;

Katika maandishi ya Orodha ya 8, iliyoundwa idadi kubwa ya maoni, kwa hivyo hakuna maana katika kuielezea zaidi. Hebu tuzingatie kwa nini utaratibu wa TForm1.Timer1Timer hutoa chaguzi mbili za kupokea picha kutoka kwa seva.

Jambo ni kwamba compression (kwa mfano wetu, azimio la skrini ya kompyuta iliyofuatiliwa ukubwa mkubwa imgScreen sehemu) kwenye upande wa seva inahitaji kompyuta ambayo inaendesha programu ya seva, muda zaidi wa CPU kuchukua nakala ya skrini. Hii inapunguza mzigo kwenye mtandao wakati wa kusambaza picha na pia huhifadhi rasilimali kwenye kompyuta ya mteja. Lakini ubora wa picha iliyoshinikwa katika kesi hii ni mbaya zaidi kuliko wakati tunatoa sehemu Picha uwezo wa kuongeza picha mwenyewe.

Ikiwa hutumii ukandamizaji wa picha kwenye seva, mzigo wa mtandao huongezeka wakati wa kusambaza nakala ya ukubwa kamili wa skrini, na kazi yote ya ukandamizaji wa picha imepewa sehemu ya imgScreen (hiyo ni, muda wa ziada wa processor hupotea kwenye kompyuta ya mteja). Ikiwa azimio la skrini ya kompyuta iliyofuatiliwa ni ya juu (au wakati wa kufuatilia kompyuta kadhaa mara moja), mashine ya mteja, ikiwa haina nguvu ya kutosha, inaweza kuanza "kupunguza kasi" kabisa. Ubora wa picha iliyoshinikizwa ni ya juu zaidi.

Kama suluhisho la ufanisi zaidi au kidogo, inaweza kupendekezwa kutumia muda mwingi kati ya maombi ya data kutoka kwa seva ya ufuatiliaji na kuongeza picha kwenye upande wa seva (isipokuwa mashine ya seva ni ya chini sana).

Chanzo. Imetengenezwa kwenye Delphi 7.

Hebu tufungue Delphi na kwa amri Faili/Hifadhi Mradi Kama... Wacha tuhifadhi mradi kwenye folda ile ile ambayo tulihifadhi hifadhidata. Anwani ya folda C:\DBIBExpert . Hebu tuhifadhi pas faili chini ya jina TelSprav1.pas , A dpr faili TelSprav.dpr . Katika dirisha hili katika mali Manukuu tuandike « Kitabu cha simu», katika mali Jina Tunaandika "TelefonSprav". Weka sehemu kwenye fomu Menyu kuu na bonyeza mara mbili juu yake, dirisha itaonekana (Mchoro 50).

Kielelezo cha 50

Katika mali Manukuu hebu andika" Faili", katika mali Jina Tunaandika " Jaza" Bofya kwenye mstatili wa bluu na mstatili mwingine utaonekana chini (Mchoro 51).

Kielelezo 51

Hebu tuchague. Katika mali Manukuu hebu andika" Funga", katika mali Jina Tunaandika " Zakrit" Chagua mstatili upande wa kulia. Katika mali Manukuu hebu andika" Kuhariri", katika mali Jina Tunaandika " Redaktirov" Nakadhalika. Matokeo yake, tunapaswa kupata kitu kama submenu hii (Mchoro 52, Mchoro 53, Mchoro 54).

Kielelezo 52

Kielelezo 53

Kielelezo 54

Sasa hebu tuache sehemu kwenye fomu Upau wa zana, kutoka kwa kichupo Win32. Mali Pangilia tutaiweka alTop. Katika mali EdgeBorders tuweke kila kitu ndani Kweli. Sehemu hii inaruhusu sisi kuweka vifungo juu yake. Hili ndilo jukumu lake kuu. Hebu bonyeza juu yake bonyeza kulia panya na kwenye menyu ndogo inayoonekana, chagua Kitufe Kipya(Mchoro 55).

Kielelezo 55

Kitufe kitatokea ambacho utahitaji kuchagua picha. Lakini kwanza katika mali Jina Tunaandika " Dob" Ili kuonyesha picha, unahitaji kuacha sehemu kutoka kwa kichupo sawa Orodha ya Picha na bonyeza mara mbili juu yake. Sanduku la mazungumzo litatokea (Mchoro 56), ambayo kwa kushinikiza kifungo Ongeza... unahitaji kuchagua picha zinazofaa za ukubwa wa 16x16. Baada ya picha zote kuchaguliwa, bonyeza kitufe SAWA.

Kielelezo 56

Hebu tuchague sehemu Upau wa zana1 na katika mali Picha chagua kutoka kwa menyu kunjuzi Orodha ya Picha1. Picha itaonekana mara moja kwenye kitufe. Ikiwa picha inapaswa kuwa tofauti, basi unahitaji kuchagua kifungo na katika mali ImageIndex Chagua inayofaa kutoka kwa menyu kunjuzi.

Bofya kulia kwenye sehemu Upau wa zana1 na katika menyu ndogo inayoonekana, chagua NewSeparator(Mchoro 55). Kitenganishi kitaonekana karibu na kitufe. Hatutabadilisha mali kwa ajili yake Jina, kwa sababu ni kitenganishi tu kati ya vifungo. Wacha tubadilishe upana wake Upana. Hebu tuifanye sawa na 5. Tunaunda vifungo vitatu zaidi kwa njia ile ile. Katika kifungo cha pili katika mali Jina Tunaandika " Nyekundu" Katika tatu " Ydali" katika nne" Utgång" Weka kitenganishi kati ya vifungo NewSeparator. Wacha tuweke kitenganishi kingine na upana sawa na takriban 50. Wacha tushushe kipengee karibu na kitenganishi Lebo na katika mali Manukuu Tunaandika jina la mwisho. Karibu na sehemu Lebo1 tutasambaza sehemu Hariri, katika mali Jina Tunaandika " Familia" Kati ya vipengele Lebo Na Hariri, jukumu la kitenganishi linachezwa na nafasi katika neno lililochapwa Jina la ukoo. Hebu tupe vipengele vingine viwili Lebo Na Hariri. Mwisho una mali Jina kuweka" Simu" Vipengele vyote viwili Hariri haja ya kusafisha mali Maandishi. Karibu na sehemu ya ingizo ya simu (Hariri) weka sehemu Kitufe katika mali Jina hebu tujulishe Naiti.

Sasa kutoka kwa kichupo Vidhibiti vya Data unahitaji kutupa sehemu kwenye fomu DBGrid. Inyoosha kwenye dirisha zima, mali Pangilia tutaiweka AlClient. Tunapaswa kujifunza kitu sawa (Mchoro 57).

Kielelezo 57

Kuonekana kwa dirisha kuu kunajengwa.

Tutaweka vipengele vya kupata hifadhidata katika moduli tofauti. Wacha tutekeleze amri Faili/Mpya/Nyingine... na katika dirisha inayoonekana (Mchoro 58) chagua DataModule tubonyeze kitufe SAWA. Ihifadhi kwenye folda moja, yenye jina moja DataModule1.pas Na DataModule.dpr.

Kielelezo 58

Katika mali Jina andika jina fupi DM . Ni katika dirisha hili kwamba vipengele vya kupata hifadhidata vitawekwa. Kutoka kwa kichupo InterBase Wacha tuweke viungo vifuatavyo: IBDDatabase, IBStoredProc, IBQuery, IBTransaction. Wacha tuache majina yao bila kubadilika, kwa sababu ... Tuliwatupa nje ya dirisha kwanza. Watapangwa na nambari 1 mwishoni. Achia kipengee kutoka kwa kichupo cha Ufikiaji wa Data DataChanzo katika orodha kunjuzi DataSet tuchague IBQuery1.

Sasa hebu tueleze ni jukumu gani kila sehemu inacheza:

  • IBDdatabase- sehemu kuu ya kuunganisha kwenye hifadhidata. Sehemu moja inaweza tu kuhusishwa na hifadhidata moja kwa wakati mmoja;
  • IBStoredProc- sehemu imeundwa kufanya kazi na taratibu zilizohifadhiwa. Inakuruhusu kuzitekeleza, kutoa data ya pembejeo na kupokea matokeo ya utekelezaji (data ya pato);
  • IBQuery- inakuwezesha kutuma maswali kwenye hifadhidata na kupokea matokeo ya utekelezaji wao. Sehemu ni analog kamili ya sehemu TQuery. Mali kuu SQL;
  • IBTransaction- inawajibika kwa uendeshaji wa shughuli zote za hifadhidata inayohusishwa na sehemu hii;
  • DataChanzo- Ni kiungo kati ya seti za data zinazowakilishwa na vipengele TIBQuery Na TIBStoredProc, na vipengele vinavyoonekana vya kuonyesha na kudhibiti data.
Hatutaelezea kila moja ya mali katika vipengele hivi vyote. Katika mchakato wa kuunda hifadhidata, kwa hali yoyote, tutalazimika kufahamiana na mali ambayo tutatumia.

Kwa hivyo, wacha tubofye-kulia sehemu hiyo IBDdatabase itatoka menyu ya muktadha(Kielelezo 59).

Kielelezo 59

Ambayo unahitaji kuchagua kipengee Kihariri Hifadhidata... Dirisha litaonekana Mhariri wa Sehemu ya Hifadhidata(Mchoro 60).

Kielelezo 60

Katika sura Uhusiano tuchague Mtaa, kwa sababu bado tunatengeneza hifadhidata ya ndani data. Katika shamba Hifadhidata unahitaji kuingiza jina la hifadhidata yetu. Unaweza, bila shaka, kuandika kila kitu kwa mkono, lakini ni rahisi zaidi kushinikiza kifungo Vinjari. Ikiwa sasa tutaingia kwenye folda na hifadhidata yetu (TELEFONSPRVOCHNIK.FDB), basi haitaonekana kwenye folda hii. Ili kuchagua hifadhidata hii, lazima uwe kwenye mstari Aina chagua faili AllFiles(*.*). Sasa faili zote kutoka kwa folda hii zitaonyeshwa. Chagua faili ya hifadhidata (TELEFONSPRVOCHNIK.FDB) na bonyeza SAWA.

Katika sura Vigezo vya Hifadhidata shambani Jina la mtumiaji ingiza kuingia kwako - SYSDBA shambani Nenosiri ingiza nenosiri - masterkey. Kuingia na nenosiri lazima liwe sawa na zile zilizowekwa wakati wa kuunda hifadhidata ndani Mtaalam wa IBE. Bila shaka, tutasimamia hifadhidata kwa kutumia programu iliyoandikwa ndani Delphi.

Katika orodha kunjuzi Seti ya Tabia tuchague Win1251. Hebu tuondoe uteuzi kwenye kisanduku hiki Ingia haraka kwa hivyo sio lazima uweke nenosiri lako kila wakati. Haki kwenye dirisha Mipangilio kila kitu ambacho tumeteua na kuingiza kinaonyeshwa.

Sasa unahitaji kushinikiza kifungo Mtihani. Kabla ya kubonyeza kitufe SAWA, unahitaji kujaribu hifadhidata. Dirisha itaonekana (Mchoro 61).

Kielelezo 61

Ikiwa inaonekana na ujumbe wa makosa, basi moja ya sababu inaweza kuwa haikubaliani na programu InterBase. Ili kurekebisha kosa hili unahitaji kufuta programu InterBase, ikiwa imewekwa. Na hakika unahitaji kufuta faili ya maktaba kwa mikono gds32.dll kwa anwani C:\WINDOWS\system32.

Baada ya ufutaji huu itabidi ufute na ndege wa moto, kwa sababu tuliondoa maktaba, Mtaalam wa IBE haitaweza tena kufanya kazi kama kawaida. Baada ya hatua hizi zote unahitaji kuweka tena FireBird. Kuna sababu kadhaa za kosa, lakini hii ndiyo ya kawaida zaidi.

Hebu tuchague sehemu IBQuery1 na katika mali Hifadhidata tuchague IBDTabase1. Mali Hifadhidata inaonyesha sehemu TIBdatabase inayohusishwa na seti fulani ya data. Katika mali Shughuli kuchagua IBTransaction1. Mali Shughuli ni wajibu wa kuchagua shughuli.

Mali ya sehemu kuu TQuerySQL kuwa na aina TStrings . Orodha hii ya mifuatano iliyo na Maswali ya SQL, ambayo itaonyesha ni meza gani au meza gani zitafanyiwa kazi. Lakini baadaye, wakati wa utekelezaji wa maombi, mali SQL inaweza kuzalishwa kwa utaratibu kwa kutumia njia za kawaida kwa darasa TStrings : Wazi- kusafisha, Ongeza- kuongeza mstari, nk.

Kwa hivyo katika mali SQL Bonyeza kifungo na dots tatu na katika dirisha inayoonekana, ingiza Swali la SQL(Mchoro 62).

Kielelezo 62

Ombi linasikika kama hii: chagua sehemu zote ( CHAGUA *) kutoka kwa meza TELEPHON_SPRAVOCCHNIK (KUTOKA TELEPHON_SPRAVOCCHNIK) na kupanga (kupanda) kwa shamba UFUNGUO (ORDER BY KEY). Bonyeza kitufe SAWA.

Hebu tuchague sehemu IBTransaction1 na katika mali DefaultDatabase tuchague IBDTabase1 .

Hebu tuchague sehemu IBStoredProc1, katika mali Hifadhidata tuchague IBDTabase1 . Katika mali StoredProcName chagua utaratibu wetu kutoka kwenye orodha kunjuzi TEL_SPRAV_PROC iliyoandikwa ndani Mtaalam wa IBE.

Hebu tuangazie IBQuery1, mali Inayotumika tutaiweka Kweli .

Hebu tuunganishe kwenye moduli hii (Moduli ya Data1) moduli kuu TelSprav1 kwa kuendesha amri Kitengo cha Faili/Matumizi..., kwenye dirisha linaloonekana (Mchoro 63.)

Kielelezo 63

tuchague TelSprav1 na bonyeza kitufe Tumia Kitengo. Baada ya neno utekelezaji katika moduli hii kutakuwa na sehemu matumizi na jina la moduli kuu TelSprav1. Sasa hapa ni moduli DataModuli1 anajua juu ya uwepo wa moduli kuu TelSprav1.

Wacha tuende kwenye moduli kuu TelSprav1 na sasa hebu tuunganishe moduli nayo DataModuli1. Sasa moduli hizi mbili zinajua juu ya uwepo wa kila mmoja.

Chagua gridi ya taifa DBGrid1 na kwenye menyu kunjuzi ya mali DataChanzo kuchagua DM.DataChanzo1 . Majina ya sehemu za hifadhidata yataonekana kwenye gridi yetu.

Sasa hebu tuunde dirisha la kuongeza data na kuihariri. Wacha tutekeleze amri Faili/Mpya/Fomu. Awali ya yote, hebu tuweke sura kwenye amri Faili/Hifadhi Mradi Kama... Katika shamba Jina la faili hebu tuanzishe moduli AddavRedakt1.pas , A Jina la fomu - AddavRedakt.dpr . Katika mali Jina ingiza jina la fomu DobRed. Wacha tuweke kwenye fomu vifaa vinavyohitajika kwa kuingiza na kuhariri data:

  1. Thariri- kuingiza jina la ukoo. Katika mali Jina Tunaandika Familia Katika mali Maandishi futa uwanja wa pembejeo;
  2. Thariri- kuingiza jina. Katika mali Jina Tunaandika Imya. Katika mali Maandishi futa uwanja wa pembejeo;
  3. TDateTimePicker- kuweka tarehe. Katika mali Jina Tunaandika VData. Katika orodha kunjuzi ya mali Hali ya Tarehe tuchague dmUpDown, ikiwa unataka, unaweza kuchagua thamani tofauti;
  4. Thariri- kuingiza nambari ya simu. Katika mali Jina Tunaandika NomerTelefona. Katika mali Maandishi futa uwanja wa pembejeo;
  5. Thariri- kwa pembejeo barua pepe. Katika mali Jina Tunaandika Barua pepe. Katika mali Maandishi futa uwanja wa pembejeo;
  6. TCheckBox- ishara ya umiliki wa simu ya rununu. Ukiangalia kisanduku wakati programu inaendesha, basi una simu ya rununu mtu huyu. Katika mali Manukuu Tunaandika Simu ya rununu. Katika mali Jina Tunaandika Mobilnik;
  7. TComboBox- orodha kunjuzi ya kuchagua jiji. Katika mali Jina Tunaandika Gorod. Katika mali Maandishi futa uwanja wa pembejeo;
  8. Kitufe- kitufe cha kuthibitisha kuongeza data. Katika mali Jina Tunaandika Ongeza. Katika mali Manukuu andika sawa;
  9. Kitufe- kitufe cha kuthibitisha uhariri wa data. Katika mali Jina Tunaandika Rekebisha. Katika mali Manukuu Tunaandika SAWA.
Tulitupa vifungo 2 vinavyofanana kwenye fomu, kwa sababu ya kushinikiza kifungo tofauti, na itaamua ni hatua gani inapaswa kufanywa kwenye data. Bila shaka, hii ni njia isiyo na maana, lakini ni ya ufanisi.

Wacha tuhifadhi sura. Hebu tufunge mradi na tuufungue tena. Baada ya kufungua mradi tunahitaji kuona kichupo AddavRedakt1 (Mchoro 64).

Kielelezo 64

Wacha tutekeleze amri Mradi/Ongeza kwa Mradi... na katika dirisha inayoonekana (Mchoro 65).

Kielelezo 65

Hebu tuchague faili AddavRedakt1.pas na bonyeza kitufe SAWA. Kutumia amri sawa, chagua faili DataModule1.pas ikiwa hatuna kichupo DataModuli1. Amri hii inatumika tu wakati dirisha Meneja wa mradi hatuna tunachohitaji pasi Na dpr mafaili. Dirisha Meneja wa mradi itatoka kwa amri Tazama/Mradi/Msimamizi...

Hebu tuunganishe moduli ya uhariri AddavRedakt1 kwa moduli kuu TelSprav1. Pia tutaunganisha moduli kuu kwenye moduli ya uhariri na DataModuli1.

Ni hayo tu! Muhimu kwa katika hatua hii, madirisha huundwa. Wacha tuendelee kwenye programu.

Katika mhudumu wa tukio OnClick(moduli kuu) kwa kitufe Ongeza andika nambari ifuatayo:

utaratibu TtelefonSprav.DabavitBonyeza(Mtumaji: TObject);
kuanza
   (ikiwa kitufe cha "Addavit" kilishinikizwa, basi tunafanya
   variable "ExiStsDobRed" amilifu)

     ExiStsDobRed:=true;
   // kwa kubonyeza kitufe cha "Dabavit" - "Tag=1"
     tag:=1;
   //fanya kitufe cha "Dob" kipatikane
     DobRed.Dobav.Inayoonekana:=kweli;
   // kitufe cha "nyekundu" kisichoweza kufikiwa
     DobRed.Redact.Visible:=false;
   // fungua dirisha
     DobRed.ShowModal;
mwisho;

Hebu kutangaza variable kimataifa ExStsDobRed Katika sura Var . Itaonekana kama hii kwenye moduli.

var
  TelefonSprav: TtelefonSprav;
  ExiStsDobRed: boolean=false;

Tofauti hii inaonyesha ikiwa dirisha limefunguliwa Kuongeza na Kuhariri Data. Tofauti hii ni ya aina ya boolean na ni sawa na chaguo-msingi Uongo. Unapobonyeza kitufe "Ongeza" kutofautiana ExStsDobRed sawa na Kweli.

Kila sehemu ina mali Tagi, ambayo inaweza kutumika kama kigezo cha kimataifa cha aina kamili kwa hiari yako. Weka mali 1 Tagi, Ni kwa mujibu wa thamani hii kwamba kifungo kinachohitajika kitaonekana. Kwa mfano: tulibofya kwenye kifungo Addav, tukio lililoelezwa hapo juu litaanzishwa.

Kama nilivyosema tayari, kwenye dirisha la kuongeza na kuhariri data kuna vifungo 2 Addav, Rekebisha(Mchoro 66).

Kielelezo 66

Picha inaonyesha vifungo viwili, lakini kwa kweli ni moja tu inayoonyeshwa. Kwa kuwa katika mstari wa nne wa kanuni tuna kifungo Rekebisha fanya isionekane. Katika mstari wa tatu tunafanya kifungo kinapatikana Ongeza. Mali hiyo inawajibika kwa vitendo hivi Inaonekana. Katika mstari wa mwisho tunaonyesha dirisha kwa Kuongeza au Kuhariri data.

Ili kukuza programu ya Saraka ya Simu, mazingira ya kuona hutumiwa. Programu ya Delphi 7. Mradi wa programu utakuwa na madirisha matatu:

  • 1. fMain - fomu kuu ya programu.
  • 2. fEditor - fomu ya kuongeza/kuhariri maingizo.
  • 3. fDM - moduli ya data.

Kwenye fomu ya fDM tutaongeza kijenzi cha ADOConnection, kijenzi 1 cha aina inayoweza kubadilishwa, kijenzi 1 cha aina ya DataSource. Bofya mara mbili mali ya ConnectionString ya sehemu ya ADOConnection. Dirisha la kuunganisha sehemu kwa ADO litafungua (Mchoro 2):

Puc. 2. Dirisha la kuunganisha kwa ADO.

Bofya kitufe cha Kujenga. Dirisha jipya linafungua (Mchoro 3.) iliyo na mipangilio ya uunganisho:

Mchele. 3.

Chagua Mtoa Data - Microsoft OLE DB Provider kwa SQL Seva. Kwenye kichupo cha Uunganisho: chagua jina la seva ambayo hifadhidata yako iko. Sasa wacha tuweke Mali Iliyounganishwa kuwa Kweli. Hebu tubadilishe sifa zifuatazo za ADOTable: Connection kwa ADOConnection1; JedwaliJina kwenye Msajili; Imetumika hadi Kweli. Badilisha sifa zifuatazo za DataSource (hiki kitakuwa kiungo cha jedwali): DataSet hadi ADOTable.

Hebu tuende kwenye fomu kuu. Chagua Faili ya amri -> Tumia Kitengo na uunganishe moduli ya DM kwake. Sasa tutaweza kuona meza kutoka kwa fomu kuu.

Tutaichapisha fomu kuu Vipengele. Ziko katika eneo la dirisha kuu la mazingira jumuishi, ambayo inaitwa palette ya sehemu (Mchoro 4.).

Mchele. 4.

Hebu tuongeze Vifungo vitatu kwa fomu kuu fMain (Mchoro 5). Zinakusudiwa kuhariri ingizo la sasa, kuongeza jipya, na kuifuta.

Mtini.5.

Kichupo cha DataControls huangazia vipengele vya kuonyesha data vinavyoonekana (vinavyoonekana na mtumiaji), kama vile DBGrid (gridi inayoonyesha data zote kwenye jedwali na kukuruhusu kuihariri), DBEdit (sehemu ya kuhariri data iliyoundwa kwa ajili ya kuingiza au kuhariri sehemu moja ya rekodi, yaani, seli za jedwali), DBMemo (kwa kuhariri sehemu za MEMO), nk. Isipokuwa tu ni sehemu ya DBNavigator. Sehemu hii haikusudiwi kuonyesha data, lakini kwa kusonga kupitia rekodi za seti ya data, kuingiza rekodi mpya au kufuta ya zamani. Ongeza na uchague DBGrid, katika mali yake ya DataSource chagua fDM.ADOTable. Gridi imejibu na tunaona majina ya mashamba (Mchoro 6.).

Mchele. 6.

Sasa hebu tuunde kichujio cha rekodi kulingana na vigezo mbalimbali. Ili kufanya hivyo, ongeza vipengele viwili vya GroupBox kwenye fomu. Katika mkaguzi wa kitu (Mchoro 7.) katika mali ya Maelezo ya sehemu ya GroupBox1, ingiza "Chuja kwa shamba moja", na kwa sehemu ya GroupBox2 "Filter kwa mashamba kadhaa".

Mtini.7.

Kwenye GroupBox1 tutaongeza Lebo 3, ComboBox 1, Hariri 1 na Vifungo 2 vya Redio. Kwa Lebo1 katika kipengele cha Manukuu tutaandika "Tafuta ndani", kwa Lebo2 "Ingiza data", kwa Lebo3 "Njia". Katika mali ya Vipengee vya sehemu ya ComboBox, ingiza mistari miwili: jina la mwisho, simu (Mchoro 8.).

Mtini.8.

RadioButton ina sifa ya Manukuu "Tangu mwanzo wa mstari" na "Tukio lolote". Kwenye GroupBox ya pili, ongeza Lebo tatu zilizo na sifa ya Manukuu: Jina la Mwisho, Jina la Kwanza, Simu. Vipengee vitatu vya Kuhariri na Kitufe kimoja chenye sifa ya Manukuu "Tafuta". Na ongeza Kitufe kingine kwenye fomu ili kuondoa kichungi.

Sasa tutaunda dirisha la mhariri wa data. Hebu tuunde sare mpya(Faili -> Mpya -> Fomu). Wacha tubadilishe jina la mali yake kuwa fEditor. Kwa kutumia Faili -> Tumia amri ya Kitengo, tutaunganisha moduli ya data ya DM kwenye fomu. Sasa tunahitaji kusakinisha vipengele vifuatavyo kwenye fomu: 8 Lebo, 7 DBEdit, 1 DBComboBox.

Hebu tumalize sehemu ya DBComboBox. Bofya mara mbili kwenye mali yake ya Vipengee ili kufungua kihariri. Tutaingiza mistari mitatu ndani yake:

Mtaa

Njia

Barabara

Hifadhi maandishi kwa kubofya OK.

Hebu tuunganishe vipengele vya udhibiti. Kushikilia , chagua vipengele vyote vya udhibiti (vipengele vyote isipokuwa Lebo). Katika mali yao ya DataSource, chagua fDM.DSLichData, kuunganisha vipengele kwenye seti ya data inayotakiwa (meza). Wacha tuondoe uteuzi wa jumla na uchague DBEdit ya kwanza. Katika mali yake ya DataField, chagua uwanja wa "Jina la Mwisho". Mali hii inaunganisha sehemu iliyochaguliwa kwenye uwanja maalum wa meza. Kwa njia hiyo hiyo, tutaunganisha vipengele vilivyobaki kwenye mashamba yanayofanana.

Katika sehemu ya chini kulia, sakinisha sehemu ya urambazaji DBNavigator kutoka kwa kichupo cha Vidhibiti vya Data. Kipengele hiki kimeundwa ili kupitia rekodi, kuwezesha hali ya kuhariri rekodi, kuhifadhi au kughairi mabadiliko yaliyofanywa, kuongeza rekodi mpya au kufuta iliyopo. Katika sifa yake ya DataSource, chagua fDM.DSLichData ili kuunganisha kijenzi kwenye jedwali kuu. Tunahitaji tu kutoka kwa kipengele hiki uwezo wa kwenda mwanzo au mwisho wa jedwali, hadi rekodi inayofuata au ya awali. Kwa hiyo, hebu tupanue mali yake ya VisibleButtons (mwonekano wa vifungo vya sehemu) na kuweka vifungo vyote kwa Uongo isipokuwa nbFirst, nbPrior, nbNext na nbLast. Kubofya kwenye vifungo hivi kutaita njia zinazofanana za sehemu ya ADOTable. Mbinu hizi hufanya yafuatayo:

Kwanza - huenda kwenye rekodi ya kwanza ya meza. Kabla - nenda kwenye rekodi ya awali. Ifuatayo - nenda kwenye rekodi inayofuata. Mwisho - nenda kwenye rekodi ya mwisho.

Wakati DBNavigator ina vifungo vinne tu vilivyosalia, vifungo hivi vitarefushwa. Hebu tupunguze upana wa sehemu ili vifungo vichukue kuonekana zaidi.

fDM.TLichData.Append;

DBEdit1.SetFocus;

Kutumia njia ya Kuongeza tunaongeza kwenye meza ingizo jipya. Ifuatayo, tunahamisha mwelekeo wa ingizo kwa DBEdit1 ili mtumiaji asilazimike kufanya hivi mwenyewe.

ikiwa fDM.TLichData.Imebadilishwa basi

fDM.TLichData.Post;

Hapa tunahifadhi mabadiliko katika meza, ikiwa ni yoyote, na funga dirisha.

Wacha tuendelee kwenye fomu kuu. Wacha tuanze na kitufe cha "Msajili mpya". Utahitaji kuongeza rekodi mpya kwa kila jedwali, na kisha ufungue kidirisha cha kuhariri:

fDM.TLichData.Append;

fEditor.ShowModal;

Wacha tutengeneze utaratibu wa OnClick kwa kitufe cha "Hariri". Kutakuwa na mstari mmoja tu wa nambari:

fEditor.ShowModal;

Matokeo yake, dirisha la mhariri litafungua na vipengele vitaonyesha data ya rekodi ya sasa.

Nambari ya kitufe cha "Futa":

fDM.TLichData.Futa;

Hebu tuendelee kwenye uchujaji wa data. Katika chujio hiki, tunachagua shamba la utafutaji, chagua njia na uingie data.

Wacha tutengeneze tukio la OnChange la sehemu ya Edit2.

ikiwa ((Urefu(Edit2.Text) > 0)na(Length(ComboBox1.Text) > 0)) basi

fDM.TLichData.Filtered:=false;

kama RadioButton1.Checked basi

fDM.TLichData.Filter:=Combobox1.Text + " LIKE " + #39 + Edit2.Maandishi + "%" + #39

fDM.TLichData.Filter:=Combobox1.Text + " LIKE "+ #39+ "%" + Edit2.Nakala + "%" + #39;

fDM.TLichData.Filtered:=true;

else fDM.TLichData.Filtered:=false;

Mstari wa hali ya kichujio unamaanisha yafuatayo - chagua rekodi hizo kutoka kwa safu ambayo huanza na herufi sawa na zile zilizochapwa katika Edit2.Text.

Neno kuu la LIKE hukuruhusu kulinganisha mifuatano kwa kutumia mchoro fulani. Katika kesi hii, unahitaji kujua yafuatayo:

ishara "%" (asilimia) - inachukua nafasi ya mlolongo wowote wa wahusika.

Ishara # 39 - inamaanisha nambari ya mhusika " (nukuu moja) katika jedwali la nambari ya ASCII. Ukweli ni kwamba thamani ya kuchuja lazima ielezwe katika nukuu moja, na kwa kuwa nukuu moja hutumiwa huko Delphi ili kupunguza masharti, kisha kuweka. ndani ya kamba nukuu moja, inahitaji kuwekwa mara mbili.

Chuja kwa sehemu nyingi. Hebu kuzalisha Tukio la OnClick kwenye kitufe cha Tafuta.

utaratibu TfMain.Button3Click(Mtumaji: TObject);

fDM.TLichData.iliyochujwa:=false;

ikiwa urefu(edit4.text) > 0 basi

filtr:= "SURNAME LIKE "+ #39 + Edit4.Maandishi + "%" + #39;

ikiwa urefu(edit5.text) > 0 basi

ikiwa urefu(filtr) >

filtr:=filtr + add + "JINA LIKE "+ #39 + Edit5.Maandishi + "%" + #39;

ikiwa urefu(edit6.text) > 0 basi

ikiwa length(filtr) > 0 basi ongeza:= " na " else add:="";

filtr:=filtr + add + "simu LIKE "+ #39 + Edit6.Maandishi + "%" + #39;

ikiwa urefu(filtr) > 0 basi

fDM.TLichData.Filter:= chujio;

fDM.TLichData.iliyochujwa:=kweli;

Showmessage("Sehemu zote ni tupu!");

Ili kuzima kichujio, bofya kitufe cha "Ondoa kichujio". Nambari yake ni kama hii:

fDM.TLichData.Filter:= "";

fDM.TLichData.Filtered:= uongo;

Kwa kuwa programu ni rahisi, niliamua kutumia hifadhidata ya MS Jet 4.0 (kwa maneno mengine, hifadhidata ya Upataji wa MS). Uamuzi huu unasababishwa na ukweli kwamba Jet (tafadhali usiichanganye na MS Access) ni bidhaa ya bure na inakuja na MS Windows (yaani, ili programu yetu ifanye kazi, hakuna haja ya kusakinisha Ufikiaji yenyewe kwenye kompyuta ya mteja). Na kihariri cha hifadhidata ni nzuri sana, na punje inasaidia rundo la aina za uga ili kukidhi matamanio yaliyopotoka zaidi wakati wa kuhifadhi data.

Kwa hivyo wacha tuunde hifadhidata mpya, iite Test na uihifadhi kwenye folda ya C:\ClientServer\Server\Data (kwa sababu dhahiri, ninaachilia mbali mchakato wa kuunda hifadhidata mpya katika Upataji, na nitatoa tu muundo wa meza zilizojumuishwa kwenye hifadhidata yetu).

1. Jedwali la kwanza, hebu tuite Kwanza (vizuri, mimi si mwandishi!)

2. Jedwali la pili, na hebu tuite kitu cha wajanja - Pili

Kweli, ndivyo ilivyo, na msingi na ndivyo hivyo.

2. Mpango
2.1. Seva ya programu.

Wacha tuunde programu mpya na tuihifadhi chini ya jina Seva kwenye folda ya C:\ClientServer\Server. Wacha tuongeze Moduli ya Data ya Mbali kwenye programu kutoka kwa kichupo cha Multitier cha hazina (Mchoro 1).

Wakati wa kuongeza RDM, mchawi wa kuongeza utauliza vigezo vya moduli hii - hapo tutaingiza jina la seva yetu "Mtihani".

Tutaacha kila kitu kingine bila kubadilika. Baada ya kubofya kitufe cha "Sawa", fomu inayofanana na moduli ya data ya kawaida inayoitwa Mtihani itaonekana kwenye mradi. Wacha tuihifadhi chini ya jina RDMFrm.pas.

Hebu tuweke juu yake vipengele vya ADOConnection (kipande kimoja), ADOTable na DataSetProvider (vipande viwili kila mmoja). Hebu tuite vipengele vya ADOTable na DataSetProvider adotFirst, adotSecond, dspFirst na dspSecond, mtawalia. Na bonyeza mara mbili kwenye sehemu ya ADOConnection mchawi wa Kamba ya Uunganisho utaonekana. Chagua kipengee "Tumia Kamba ya Uunganisho" na ubofye kitufe cha Kujenga. Katika dirisha la "Sifa za Kiungo cha Data" inayoonekana, chagua "Microsoft Jet 4.0 OLE DB Provider" na ubofye kitufe cha "Next". Katika kichupo cha "Uunganisho", ingiza njia ya hifadhidata, bofya kitufe cha "Angalia uunganisho" na upokee ujumbe ambao hundi ya uunganisho imekamilika. Kisha funga mchawi kwa kubofya kitufe cha OK. Sehemu ya ADOConnection pia ina mali inayoitwa LoginPrompt, ambayo tutaiweka kuwa Sivyo na Imeunganishwa kwa Kweli. Kwa vipengele vinavyoweza ADOTable, weka kipengele cha Muunganisho kwa ADOConnection kwa kuchagua kutoka kwenye orodha kunjuzi. Weka mali ya TableName kuwa ya Kwanza na ya Pili, mtawalia. Sifa ya CursorType ni ctDynamic, mali ya TableDirect ni Kweli. Piga simu FieldsEditor na uongeze sehemu zote hapo.

Kwa vipengele vya DataSetProvider:

Katika hatua hii mchakato wa kuunda seva ya zamani ya MIDAS inaweza kuchukuliwa kuwa kamili. Ili kusajili seva katika mfumo mdogo wa DCOM, unahitaji kuendesha programu na parameta ya /regserver - Server.exe /regserver.
Na mguso wa mwisho ni programu ya SocketServer kutoka Borland, ambayo iko kwenye folda ya Delphi?/Bin/scktsvr.exe. Ili mteja aone seva, unahitaji kuendesha scktsvr.exe (ikiwa umesakinisha Win NT/w2k/XP, unaweza kusajili programu hii kama huduma; ili kufanya hivyo, unahitaji kuiendesha na sktsvr. .exe / kigezo cha kusakinisha)

2.2. Maombi ya mteja

Wacha tuunde programu mpya na tuihifadhi kwenye folda ya C:\ClientServer\Client chini ya jina la Mteja. Hebu tuweke kwenye fomu kuu vipengele viwili kila ClientDataSet (hebu tuviite cdsFirst, cdsSecond), DataSource (hebu tuziite dsFirst, dsSecond), DBGrid (hebu tuziite dbgFirst, dbgSecond) na sehemu moja ya SocetConnection.

SocetConnection

Ikiwa ulifanya kila kitu kwa usahihi, basi unapoweka mali Iliyounganishwa kwa Kweli, programu ya seva inapaswa kuanza.

ClientDataSet

Wacha tuzindue Kihariri cha Shamba (bofya mara mbili kwenye sehemu) na uongeze sehemu zote hapo. Kwa vipengele ClientDataSet tuandike mshikaji sdsAfterPost

Na uibadilishe kwa usindikaji wa tukio AfterPost zote mbili ClientDataSets.

DataChanzo

Mali Maana
DataSetcdsFirst na cdsSecond mtawalia

DBGrid

Mali Maana
DataChanzodsFirst na dsSecond mtawalia

Wacha tuzindue Mhariri wa Safu (bofya mara mbili kwenye sehemu) na uongeze sehemu zote hapo.
Hebu tuweke kitufe kwenye fomu karibu na Gridi na tuiandike kwenye kidhibiti cha onClick.

Tuma kazi yako nzuri katika msingi wa maarifa ni rahisi. Tumia fomu iliyo hapa chini

Wanafunzi, wanafunzi waliohitimu, wanasayansi wachanga wanaotumia msingi wa maarifa katika masomo na kazi zao watakushukuru sana.

Iliyotumwa kwenye http://www.allbest.ru/

JARIBU

Ukuzaji wa programu ya seva ya mteja katikaDelphi

Muhtasari wa kipengele

Kufanya kazi na ADO, kuna vipengele sita kwenye kichupo cha vipengele vya ADO: TADOConnection, TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc.

Mchele. 1. Palette ya vipengele vya ADO

TADOConnection inatumika kubainisha hifadhidata na kufanya kazi na miamala.

TADOTable ni jedwali linaloweza kufikiwa kupitia ADO.

TADOQuery - swala kwa hifadhidata. Hili linaweza kuwa swala linalorejesha data na hifadhidata (kwa mfano, CHAGUA), au swali ambalo halirudishi data (kwa mfano, INSERT).

TADOStoredProc - piga utaratibu uliohifadhiwa.

TADOCommand na TADODataSet ndizo nyingi zaidi vipengele vya kawaida kwa kufanya kazi na ADO, lakini pia ngumu zaidi kufanya kazi nayo. Vipengele vyote viwili vinakuruhusu kutekeleza amri katika lugha ya mtoaji data (kama vile kiendesha hifadhidata kinavyoitwa katika ADO).

Tofauti kati yao ni kwamba amri inayotekelezwa kupitia TADODataSet lazima irudishe seti ya data na sehemu hii hukuruhusu kufanya kazi nao kwa kutumia zana za Delphi (kwa mfano, kumfunga kijenzi cha aina ya TDataSource). Na sehemu ya TADOCommand hukuruhusu kutekeleza amri ambazo hazirudishi seti ya data, lakini haina fedha za kawaida Delphi ili kutumia baadaye mkusanyiko wa data uliorejeshwa.

Kwa wazi, vipengele vyote lazima viwasiliane na hifadhidata. Hii inafanywa kwa njia mbili, ama kupitia sehemu ya TADOConnection au kwa kubainisha moja kwa moja hifadhidata katika vipengele vingine. Vipengele vingine vimefungwa kwa TADOConnection kwa kutumia mali ya Muunganisho, na kwenye hifadhidata moja kwa moja kupitia mali ya ConnectionString.

algorithm ya hifadhidata ya programu

Jedwali 1. Vipengele kuu vya kichupo cha ADO

Jina

Mali ya msingi

Maoni

Kuwajibika kwa mawasiliano na hifadhidata

ConnectionString

Ina mipangilio ya kuunganisha kwenye hifadhidata.

hutumika kubainisha iwapo kisanduku cha mazungumzo kionyeshwe kwa ajili ya kuingiza kitambulisho cha mtumiaji na nenosiri wakati wa kuunganisha kwenye hifadhidata;

inaonyesha shughuli ya uunganisho: Kweli inamaanisha uunganisho umefunguliwa, Uongo unamaanisha kufungwa;

Mbinu za msingi

Maoni

kutumika kuanzisha shughuli mpya na kurejesha kiwango cha shughuli zilizowekwa;

hufunga muunganisho uliofunguliwa kwa sasa

huandika mabadiliko yote yaliyofanywa na shughuli ya sasa kwenye hifadhidata na kuimaliza

kutumika kutekeleza maswali au taratibu zilizohifadhiwa. Taarifa inayoweza kutekelezwa imepitishwa njia hii kupitia parameter;

hufungua muunganisho kwa chanzo cha data kilichoainishwa kwenye ConnectionString

hutupa mabadiliko yote yaliyofanywa tangu simu ya mwisho kwa mbinu ya BeginTrans na kutamatisha muamala bila kuhifadhi mabadiliko.

Mali ya msingi

Maoni

TADOQuery Iliyoundwa kwa ajili ya kufanya kazi na maswali

Imeundwa kufanya kazi na taratibu zilizohifadhiwa

Ina jina la sehemu ya ADOConnection

Ina jina la utaratibu uliohifadhiwa

Algorithm ya kazi

1. Unda DataModuli mpya Chagua kipengee cha menyu ya Faili\Mpya\DataModule. Tunamuita DM.

Tunatupa ADOConnection, ADOQuery na vipengele vitatu vya ADOStoredProcedure kwenye DM. Jinsi inavyoonekana, ona Mtini. 2

Mtini.2 Tazama DM

2. Weka vipengele vya vipengele

ADOConnection - tazama mwongozo.

Badilisha jina la ADOQuery 1 kuwa QVrash na uandike hoja katika mali ya SQL:

Chagua * kutoka Vrash

Mali ya Connection ni ADOConnectionl.

Unda sehemu tuli za QVrash.

Kwa sehemu ya ADOStoredProcl tunaweka mali zifuatazo

* Jina - ASPinsVrash

* Muunganisho - ADOConnection 1

* Jina la Utaratibu - Ingiza Kuu; 1

Ikiwa unabonyeza mali ya Parameters, utaona vigezo ambavyo tutapita kwenye utaratibu.

Kwa sehemu ya ADOStoredProc2, weka sifa zifuatazo

* Jina - ASPEdVrash

* Uunganisho - ADOConnectionl

* UtaratibuJina - MainEdit; 1

Kwa sehemu ya ADOStoredProc3, weka sifa zifuatazo

* Jina - ASPdelVrash

* Uunganisho - ADOConnectionl

* UtaratibuJina - MainDelete; 1

Weka vipengele vya DBGrid, Vifungo viwili, DataSource, MainMenu kwenye fomu 1

Mtini 3. Fomu ya 1

Badilisha jina la vifungo kulingana na picha

Kwa kitufe cha Sasisha nambari

DM.QVrash.Funga; //sasisha n/a

Kuunda menyu

Mchele. 3. Hariri menyu

Unda fomu ya kuongeza/kuhariri: Vipengele BONYEZA

Msimbo wa programukwa kipengee cha menyukwenye form 1-NYONGEZA

Form3.Edit1.text:="";

Form3.Edit2.text:="";

Form3.Edit3.text:="";

Form3.Edit4.text:="";

Form3.mtindo wa maonyesho;

Nambari ya programu ya kitufekwenye form 3-INGIZA

Bmfano

showmessage("Si sehemu zote zimejazwa");

End;

Try

DM.ADOConnection1.BeginTrans;

na DM.ASPinsVrash do

Vigezo.ParamByName("@ID_Physician").Thamani:=StrToInt(Edit1.text);

Vigezo.ParamByName("@YYYY`).Thamani:=Hariri2.Text;

Vigezo.ParamByName("@YYYY ").Thamani:=Hariri3.Text;

Vigezo.ParamByName("@YYYY ").Thamani:=Edit4.text;

DM. ASPinsVrash.ExecProc;

Eila

DM. QVrash.Funga;

DM. QVrash.Fungua;

Iliyotumwa kwenye http://www.allbest.ru/

Msimbo wa programu wa kipengee cha menyu kwenye fomu ya 1 - BONYEZA

Bmfano// Kuhariri

n:=DM. QVrash.XXXX.Thamani;

DM. QVrash.Funga;

DM. QVrash.Fungua;

DM. QVrash.Locate(XXXX,n,);

Form3.Label6.Caption:=IntToStr(DM.QVrash.XXXXXvalue);

Form3.Edit1.text:=inttostr(DM.QVrashYYYYYY.Thamani);

Form3.Edit2.text:=inttostr(DM.QVrashYYYYY.Thamani);

Form3.Edit3.text:=floattostr(DM.QVrashYYYYY.Thamani);

Form3.Edit4.text:=DateToStr(DM.QVrash.YYYY.Thamani);

Fomu ya3.Modi ya maonyesho;

DM. QVrash.Funga;

DM. QVrash.Fungua;

Msimbo wa programu wa kitufe kwenye fomu ya 3 - BONYEZA

Bmfano

Ikiwa (Edit1.text="") au (Edit2.Text="") au (Edit3.Text="") au (Edit4.Text="") basi

Bmfano

ShowMessage("Si sehemu zote zimejazwa");

End;

Try

DM.ADOConnection1.BeginTrans;

na DM.ASPedVrash fanya

Vigezo.ParamByName("@XXXX).Thamani:= DM.a QVrash.XXXXX.thamani;

Vigezo.ParamByName("@YYYY).Thamani:=Hariri1.maandishi;

Vigezo.ParamByName("@YYYYY).Thamani:=Hariri2.Text;

Vigezo.ParamByName("@YYYY").Thamani:=Edit3.Text;

Vigezo.ParamByName("@YYYY).Thamani:=StrToDate(Edit4.text);

DM.ASPEd.ExecProc;

DM.ADOConnection1.CommitTrans;

Eila

DM.ADOConnection1.RollbackTrans;

ShowMessage("Haijakamilika. Tafadhali jaribu tena.");

DM. QVrash.Funga;

Msimbo wa programu wa kipengee cha menyu kwenye fomu ya 1 - DELETE

Anza// Futa

if MessageDlg("Una uhakika unataka kufuta ingizo?", mtConfirmation,,0)=mrYes basi

DM.ASPdel.Parameters.ParamByName("@XXXX).Thamani:=DM.ADOQuery1XXXXX.Thamani;

Try

DM.ADOConnection1.BeginTrans;

DM.ASPdelVrash.ExecProc;

DM.ADOConnection1.CommitTrans;

Eila

ShowMessage("Imeshindwa kufuta!"+#13+"Ingizo limezuiwa au tayari limefutwa!");

DM.ADOConnection1.RollbackTrans;

Etoka;

DM. QVrash.Funga;

DM. QVrash.Fungua;

Iliyotumwa kwenye Allbest.ru

Nyaraka zinazofanana

    Maendeleo ya mfumo wa habari usimamizi wa utawala. Kuchagua lugha ya programu na mazingira. Muundo wa mwingiliano wa habari. Mahitaji ya mazingira ya programu na vifaa. Kuunda programu katika Delphi na kuiunganisha kwenye hifadhidata.

    kazi ya kozi, imeongezwa 10/08/2015

    Borland Delphi 7 kama zana ya maendeleo ya ulimwengu wote inayotumiwa katika maeneo mengi ya programu, kazi: kuongeza habari kuhusu waombaji kwenye hifadhidata, kutoa ripoti. Tathmini na sifa za sehemu kuu za Delphi.

    mtihani, umeongezwa 10/18/2012

    Maendeleo ya programu ya kufanya kazi na habari na usindikaji wake katika lugha ya programu ya Delphi. Maelezo ya algorithms ya kufanya kazi na stack - kuongeza, kufuta vipengele, kuhariri rekodi. Maagizo ya kutumia programu.

    kazi ya kozi, imeongezwa 02/06/2013

    Kuzingatia vipengele vya mazingira ya programu ya Delphi, uchambuzi wa toleo la mteja-server. Utangulizi wa maktaba ya sehemu ya kuona. Kazi za msingi za mhariri mwenye akili. Tabia za mahitaji ya hifadhidata. Kazi za programu ya Mwalimu.

    tasnifu, imeongezwa 03/10/2013

    Tabia za mfumo wa programu. Sehemu kuu za Delphi. Kiolesura programu ya programu. Matokeo ya programu. Usimamizi programu ya mfumo na mwendeshaji. Lugha ya programu ya Delphi, mazingira ya mkusanyaji wa Borland 7.0.

    kazi ya kozi, imeongezwa 05/29/2013

    Kuandika mpango wa kufanya kazi na wateja kwa kutumia lugha ya Delphi, ambayo hutoa kwa kuingia, kuhariri na kufuta habari. Maendeleo ya algorithm ya kutatua tatizo, maelezo ya vigezo, taratibu za msaidizi, data ya pembejeo na pato.

    kazi ya kozi, imeongezwa 09/21/2010

    sifa za jumla Mfumo wa programu ya Delphi, pamoja na kanuni za kuunda vipengele vyake. Maelezo ya maadili ya faili ya programu iliyoundwa na Delphi. Muundo na mali ya maktaba ya sehemu ya kuona (Maktaba ya Sehemu ya Visual au VCL).

    ripoti ya mazoezi, imeongezwa 12/07/2010

    Ubunifu na uundaji wa kiolesura cha mtumiaji na programu ya kuona katika mazingira ya Delphi. Mfumo wa usimamizi wa hifadhidata. Ndani na kimataifa maoni maalum. Uchambuzi wa kikoa. Kusudi la fomu na vipengele.

    kazi ya kozi, imeongezwa 03/07/2014

    Historia ya mazingira jumuishi ya maendeleo, toleo la Delphi. Kuandaa maktaba ya sehemu. Ukurasa wa ziada, idadi ya vipengele vya madhumuni ya jumla vinavyotumika. Faili inayoweza kutekelezwa ya programu "Archiver" faili za maandishi", kiolesura cha programu.

    kazi ya kozi, imeongezwa 05/16/2017

    Maendeleo bidhaa za programu katika lugha ya programu ya Borland Delphi. Jedwali zinazotumika na uhusiano kati yao. Kiolesura cha mtumiaji kwa kufanya kazi na hifadhidata. Algorithm ya programu "Timu za mpira wa miguu na wachezaji". Ulinzi dhidi ya uingizaji wa data usio sahihi.