- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Parci: Milyen mosógépet vegyek?
- Brogyi: CTEK akkumulátor töltő és másolatai
- Mr. Y: Motoros sztorik #06
- Elektromos rásegítésű kerékpárok
- Magga: PLEX: multimédia az egész lakásban
- bambano: Bambanő háza tája
- vrob: Az IBM PC és a játékok a 80-as években
Új hozzászólás Aktív témák
-
Alan
aktív tag
Tusi, megértelek. Ha ott lettem volna, biztos pofán vágom.
De nem az számít, hogy mit csinált az a majom, meg mit gondolt a bizottság, még csak nem is a jegy. Az számít, hogy megcsináltad. Lehet, hogy neked úgy tűnt, hogy nem sikerült jól, de szerintem igenis bizonyítottál.
Gratulálok, és ha tanítani fogsz, nevelj jó diákokat, olyan kitartókat és lelkeseket és fejlődőképeseket, mint te -
Alan
aktív tag
Szia tusi, jól elmerültél a diplomamunkában, te szegény.
Szerintem ez nem offolás, jó helye van itt a kérdéseidnek, úgyhogy leírom az egy-két vérszegény ötletemet:
1. BDE
Amit btotyi mondott, az nagyon jó. A BDE egy egységes programozói felületet adó, fizikai adatbáziskezelést elszigetelő szoftverréteg, nagyon sok relációs adatbázismotort támogat, ráadásul ODBC-n keresztül bármilyen adatbázishoz illeszthető (még pl. vacak Excel fájlokhoz is), így elvileg univerzális programot tudnál írni, ami nulla vagy minimális módosításokkal használhat DB2-t, Oracle-t, Interbase-t, Sybase-t vagy akár a jó öreg Paradox táblákat (legjobb, ami a kis helyi adatbázisok kezelésére abszolút megfelelő és kényelmes.
(A legnagyobb hátránya egyébként szintén ebből a funkciógazdagságból adódik: egyrészt nagyon komplex, már nem is fejlesztik tovább, másrészt maga a BDE motor nem tud rendes kétfázisú tranzakciókezelést, harmadrészt a teljesítménye és megbízhatósága bizonyos rekord/felhasználószámig nagyon jó, utána viszont hirtelen letörik, ami általában nem elfogadható. Én szeretem amúgy, a határain belül igazán jó kis adatbázismotor. Tapasztalatom szerint kb. 10-15 user és 15-30.000 rekord/tábla a maximum, utána dögvész.)
2. TStringGrid
Nehéz kérdés, hiszen a DBGrid-et pont adatbáziskezelésre találták ki... mondjuk mondd azt, hogy rugalmatlannak találtad és a TStringGrid viselkedése, a megjelenítés, az adatbázis-illesztés sokkal jobban testreszabható (ami igaz is). Erre sajnos valószínűleg azt fogják mondani, hogy nem biztos, hogy megérte a rengeteg pluszmunkát, mert annyival nem lett jobb a szoftver, amennyi extra időt a TStringGrid-es megvalósítás elvitt, és igazuk lesz, de majd mosolyogj szépen -
btotyi
tag
BDE: Ha BDE-t használsz akkor ELVILEG le tudod alatta cserélni az ab-t mivel a BDE egy abszrakt réteget tesz közéd meg az ab közé. Nézd meg az SQL Explorert (kicsit problémás ugyan de alapjában használható). Abban is minden ab (amihez van BDE interfész) ugyanolyan módon kezelhető. ( Na persze nem tud minden finomságot amiket a a natív kliensek de működik)
StringGrid : mert megtanulsz egy kicsit másképpen gondolkodni meg programozni mint a drop'n click komponensekkel -
Alan
aktív tag
Adj valami bővebb kódot, ennyiből nem lehet elég jól megállapítani, hogy mi a gond. A ''Close'' helyett mindenképpen írd azt, hogy ''Application.Terminate''. Ha zavar, hogy ilyenkor hirtelen megjelenik, majd eltűnik a főform, csináld azt, hogy pl. ''Halt(1)'' a ''Close'' helyett, erre durván (vagyis nagyon duLLLván) kilép a program. Ez utóbbi nem mindig célszerű, látatlanban nem tudom, hogy milyen struktúrájú a programod, lehet, hoyg access violation lesz a vége.
Amúgy pedig debug infóval fordítsd le (Project -> Options -> Compiler -> Debugging csoportban mindenhová pipa, majd Project -> Build), lépésenként futtasd (F8 billentyű), menj bele a kérdéses részbe, és nézd meg, hogy a kivétel pontosan hol keletkezik. Az is lehet még, hogy nem a te try..except..end blokkodabn keletkezik a kivétel, vagy valahol máshol van egy üres except..end kivételkezelő, ami ''megeszi'' a kivételedet és már nem jut el a kezelődhöz. -
Alan
aktív tag
Jó ötlet!
Még ha van kedved, azt is megcsinálhatnád, hogy a futási időben összeállított SQL parancsok végleges alakját írja ki erre a formra, pl. egy TMemo komponensbe. Tudod, olyan SQL Monitor-szerűségre gondolok, amivel bárki ellenőrizheti, hogy az összeállított SQL parancsok helyesek-e. A három DBGrid-es tesztformodtól, meg ettől a monitortól vérprofin fog kinézni a tesztelés. -
lao ce
aktív tag
ha van egy geped mas oprendszerrel (akar kolcson) es a network megy kozottuk,
akkor vegig tudlak vezetni hogy mit kell csinalni hogy lassa az uj gep az oracle-t. eleg necces, de nehany-tizszer eletemben mar sikerult.
biztos ilyet kerdeznek hogy miert eppen az oracle-t valasztotta? jobb ha kitalalsz valamit, az 'azt tudtam megszerezni' valasz hatareset -
Mancs
csendes tag
Ne félj, ifjú padawan, csak nagy rosszindulattal tudnának megakasztani
Nincs véletlenül egy notebook kéznél, amire előre fel tudnád tenni a klienst, csatlakoznál egy jól felkészített szerverhez és azzal mutatnád be? Megnyugtatna téged is, ha előre látnád, hogy fog menni. -
Alan
aktív tag
Elvileg szerintem nem neked kell bizonyítanod, hogy jó, hanem nekik, hogy rossz. A programod ott lesz mellékelve, az a bizonyíték, ha akarják, kipróbálhatják.
Tudom, hogy egy kicsit elvetettem a sulykot, de mit csináljak, belelkesedtem, mert tetszik a munkád. De szerintem sincs már idő arra, hogy mindent teljesen végigcsinálj, csak az a lényeg, hogy te ismersz tesztelési módszertant és ezt ők is lássák. Szóval nem kell annyira aprólékosan, mint amit itt írsz (16 -> 17), hanem inkább olyanokat írj le, hogy a bonyolultabb SQL utasításokat milyen tesztadatokkal próbáltad ki, a futási időben felépített SQL-ek minden ágát kipróbáltad-e és ha igen, milyen paraméterekkel. Aztán egyszerűen megállapítod, hogy erre is, arra is működött. S persze képernyőfotók mindig jól jönnek, ha még van idő a cicomára.
-
lao ce
aktív tag
hat nem tudom hogy pontosan nekem mit tanitottak, de eleg hangsulyos a dolog. nem ertem hogyan lehet hogy errol nem beszeltek?
otleteim vannak:
-a program terveben nem art hogyha van valamifele utalas a hibakezelesre
-a funkciok specifikaciojanak meglete is a resze a tesztelesnek
-elvileg le kellene talan tesztelni minden procedurat es funkciot helyes es helytelen bemeneti ertekekkel.
-vegig kellene talan csinalni egy 'joindulatu' es egy 'rosszindulatu' tesztet a felhasznaloi feluleten. joindulatu a mikor szuletett kerdesre az 1922-01-22 a rosszindulatu a 12-333-2. utcanevre mondjuk a petofi utca a joindulatu es haromszaz egyes karakter vagy a ' '' !@#$%^&*43 a rosszindulatu.
-keyboard kombinaciok, szabalytalan kilepes. alt+f4, ctrl+alt+del okoz problemat? ctrl+escape,felnyil,enter,enter?
-ha a programot valahol hasznalnak akkor kulso tesztelesre lehet vinni par napra, es akkor lehet mondani hogy ez meg az a funkcio az o keresukre kerult bele. ez a 'hasznalhatosagi teszt'. de ez lehet egy 'kollega' is ha nem lesz hasznalva a program.
-video teszteles kulonbozo felbontasban, szinmelysegben, temakkal, nagy karakterekkel(!)
-platform teszt... mas gepen es vindoz verzioban. xp sp2 kompatibilis?
-tovabbi dolgok, hogy okoz-e gondot: windows terheles alatt van a futas alatt, tobb peldanyban fut, halozati kimaradas.
-lehetne csinalni egy stress tesztet. megitelni hogy egy-ket-ot ev mulva mekkora lesz a rendszer. aztan insertalni tizezer tanart fejenkent tizezer oraval, es megnezni, hogy melyik resz lett iszonyu lassu.
de senki nem tudja hogy mit kellett volna tanulni es tanitani neked ott... szoval ezek csak otletek. -
Alan
aktív tag
-
Alan
aktív tag
Az az egyik jó dolog a programozásban, hogy mindent megcsinálhatsz, kipróbálhatsz és nincs komoly következménye, ha nem sikerült, ''letúrod'' és kezded elölről, ennél rosszabb nem történhet. Nincsenek fizikai törvények, amik korlátoznának - az életben nem tudok 150 m magasra felugrani, de a szoftverépítésben minden lehetséges.
Szóval nem kell pánikolni, ha valami nincs leírva, kitalálod, megcsinálod, és ha nem jó, továbbfejleszted. Ahogy csináltad ;) És így sokkal nagyobb is az öröm, ha működik a ''szoft'', úgy, ahogy megírtad.
Én egyébként a debugolástól rettegek mindig, vagyis attól, hogy lesz egy hiba a programban, amit nem fogok megtalálni. Ez egy ilyen irracionális félelem, tudod, mint amikor pl. valaki fél a liftben vagy a sötét, kis helyeken. Még sosem volt olyan hiba, amit ne találtam volna meg, de mégis mindig jön a pici gyomorgörcs, ha valami érthetetlenség történik a programomban
Amúgy ha még fogsz fejleszteni ezek után is, akkor ajánlom a Delphi 7 mesteri szinten c. könyvet (Marco Cantú), nagyon jó ez az egész sorozat. Sok példaprogram is van benne, amiket átírhatsz. Jó éjt, aludj még egy nagyot -
Alan
aktív tag
Királynő vagy, tusi74. Minden elismerésem, tényleg. Aztán ne rókázz sokat ;)
Mondjuk ezen a kódolós fedélzeten én már sokkal ritkábban nyomulok, mint pl. te, lao ce, régen még jobban bírtamA ''zsíros'' kóláról is átszoktam a lájt löttyre, mert híztam 15 kilót, persze ebben benne van a házasság is, meg a lustaság meg minden... És azt vettem észre, hogy már 8-10 óra fejlesztés után elfáradok, pedig a csúcsom 35 óra zsinórban, és a 14-16 meg se kottyant.
Kicsit sajnálom, hogy elmúltak a demós, örömfejlesztős, korrekt versenyes, valódi színvonalat értékelős, egymásnakkódotmegmutatós, mindentmeglehetmégcsinálni stílusú idők. De azért egy jó Delphivel felszerelve még most is klasszul meg lehet nyomni a gombot, nem igaz? -
lao ce
aktív tag
velkam on da bord.
Alan... figyu mar, tusi azt hiszi hogy azert mert nem eszik es csak kolat iszik egesz nap majd mi itt hasraesunk. bevallottan meg a wc-re is kiszaladgal, hat hol tart a vilag komolyan... november ota ccc... melyik ev? tusi, legkozelebb rendelj pizzat, azt siman be tudjak csusztatni a csukott ajto alatt, tudsz kozben fejleszteni -
Alan
aktív tag
...ugyan a kutyát nem érdekli, de off-ban megjegyzem, hogy többek között az ilyenek miatt nem használom, sőt fel sem telepítem a Rave Reports-ot.
Mindenki szidja a QuickReports-ot, csakúgy, mint a BDE-t, de én mind a kettővel jól elvagyok. Tudni kell persze, mik a határok, de azok abszolút nem olyan szűkek, hogy ne lehetne megoldani velük a valódi problémák jó részét. A QuickReports nekem sokkal jobban tetszik, és szerintem te is, tusi74, sokkal jobban tudnád (majd a jövőben) használni.
Na megyek vissza robotolni ;)
[Szerkesztve] -
lao ce
aktív tag
ok.
1) allj a reportformra. nyomjal alt+f12 -ot. a report formod atvalt text-re.
2) ctrl+f, ird be a keresobe hogy txtnev.
3) keresd meg hol van. a sor ilyen lesz object txtnev: Tvalami (talan TText).
4) scrolloz felfele amig nem talalod meg hogy melyik masik objektumon belul talalhato a txtnev objektum. azaz, az elso olyan object.... sor lesz ami balrabb van rendezve a txtnev-nel
object form : Tform
...tulajdonsagok, objektumok sok soron keresztul...
...object valami : Tvalami <- ezt keressuk
......tulajdonsagok, objektumok sok soron keresztul......
......object txtnev : TValami
5) jegyezd meg a szulo nevet, ezt kell hasznalni.
6) alt+f12 (valts vissza) -
lao ce
aktív tag
es a text nem jo? gondolom van olyan hogy Name az a neve a Text meg a szoveg ami benne van. nem ertem mit nem ertesz. vagy nem ertem en mit nem ertek.
szerk: basszus nevezd mar at azt a komponenst txtTanarNeve-re jo? kerlek. Name propertybe irdd be hogy txtTanarNeve. hat meg ilyet. irgum-burgum mar.
[Szerkesztve] -
lao ce
aktív tag
RvProject2.Text5:=Query18...
hat, ezt nem is fogja. nem tudom milyen tipusu mezo a statikus. Label lenne (mint quickreportban)? mert akkor van captionje (ezert irtam en is hogy caption az elobb). esetleg valami rave report altal keszitett sajat text tipus? nincs olyan hogy Text5.text, Text5.value, Text5.caption vagy esetleg Text5.azanyjat?
eloszor probald hogy Text5.Valami := 'alma';
ha az almaval megy akkor Query blabla is menni fog. -
lao ce
aktív tag
otlet:
hat, ha a nev parameterkent jon (azaz ismert), akkor esetleg vedd ki az adatbazis fieldet teljesen, es ugy ahogy az 'orabeosztasa' szoveget kiirod, tegyel statikus textet, DE, azzal a kulonbseggel hogy a riport formjanak oncreate eventjeben egyszeruen tedd egyenlove egy valtozoval ami a tanar nevet tartalmazza. csak lehet olyat hogy TanarStatTextField.caption := NevString; nem? ez ugyan nem javitana ki a hibat, de megoldana a problemat. -
tusi74
őstag
Ja és még nagyobb gáz, elveszett 2 hete a témavezetőm'' . Sem e-mailre nem válaszol, sem a telefonját nem veszi fel. 1 hónapja még abban állapodtam meg vele, hogy majd legalább egyszer elolvassa a beadás előtt, úgy hogy a hibákat legyen időm kijavítani. Nem mintha eddig hejde segített volna. Holott előre közöltem vele a játékszabályokat, hogy nem vagyok rutinos programozó. Még Ő mondta, hogy egy kihívás lesz neki velem dolgoznia, mert még nem volt tanítványa, aki abszolút kezdőként bevállalt volna ilyet. Ehhez képest, ha nincs ez a fórum, akkor még sehol sem lennék. De legalább kipanaszkodtam magam.
-
Alan
aktív tag
Rossz hírem van, szerintem az OK és Cancel gombokat kivéve maradna angolul, mert ez egyedi párbeszédablak. Ha borzalmasan sok időd lenne, azt mondanám, Resource DLL Wizard (azaz Project -> Languages -> Add, majd Hungarian 0x40e) és fordíts le mindent magyarra, de ettől most szerintem te is eltekintesz
A másik Rave Reports-os kérdést passzolom, nem használtam sosem.
Szurkolok neked, ismeretlenül is
[Szerkesztve] -
lao ce
aktív tag
tolem mindig valami bonyolultat olvasol.
- canvas-t nem tudom magyarul, de vaszon (festo) ha leforditod szo szerint.
- a nyolc az pixelben van. amolyan magic number, izles szerint.
- ez a kod iszonyu, ezert nehez erteni kicsit.
a TextWidth amire mi utazunk, es ez egy canvashoz kapcsolodik, tok mindegy hogy melyiket hasznaljuk. tobb canvas is van eppen hasznalatban, a stringgridnek es a formnak biztosan ott csucsulnek a canvasai.
ha csak ugy siman benyogi az ember hogy canvast ide vazze, akkor a form canvasat erti a delphi. de, ha with...do is van, akko' eloszor megprobalja, hogy ami a with-be van irva annak van-e canvasa ha igen akkor azt hasznalja. aki irta ezt a programreszletet nyilvanvaloan nem volt tisztaban ezzel.
namarmost.
Canvas.Font := Font
ez a sor hulyeseg. vedd ki a fenebe. megprobaltam leirni hogy miert hulyeseg, de inkabb 'gondolkozz rajta', mert 15 sor volt a magyarazat es en magam sem ertettem a vegen amit irtam...
tudod mit? atirtam neked, mert igy legalabb ertheto mi tortenik, ne mar 6 soron muljon.
// vegigmegy ket ciklussal a cellakon oszloponkent, kiolvassa a cella
// szovegenek szelesseget (TextWidth), eltarolja a legnagyobb erteket
// vegul beallitja az oszlopot a legnagyobb szelessegre
for j := 0 to StringGrid1.ColCount -1 do begin
...maxSzeles := 0;
...for i := 0 to StringGrid1.RowCount -1 do begin
......aktSzeles := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[j, i]) + 8;
......if aktSzeles > MaxSzeles then maxSzeles := aktSzeles;
...end;
...if maxSzeles > 0 then StringGrid1.ColWidths[j] := maxSzeles;
end;
lefogadom hogy igy mar teljesen vilagos mirol van szo. sot, talan a tanarok is elboldogulnak vele -
lao ce
aktív tag
sajnos a rave reportot nem ismerem.
ha a select az jo csak egyszeruen tobbszor jon a nev a kulonbozo orak melle, akkor a riportban kell olyasmit keresni hogy suppress duplicates vagy ilyesmi. mondjuk en jobb vagy duplaklikkelnek a nev mezon, csak van valami property vagy options, aztan ott keresgelnek.
az is lehet hogy egyszeruen logikailag rosz helyen van a nev, nem detail bandra kell rakni, hanem group band szeru dologra -egy lepessel kifele. lehet hogy letre is kell hozni pluszban ezt a band-et. tanarbacsi adatai a groupbanden, orak neve a detail banden.
ha a select a ludas azaz ismetles van az eredmenysorok kozott, akkor distinct kulcsszo kell (select distinct tanarbacsineve, oraineve from....)
tisztogatas: csak megemlitem, hogyha duplaklikkelsz a warningra (vagy az errorra) a kurzor odaugrik ahol a felesleges valtozod van, es csak egy mozdulat kiszedni a sort... -
Alan
aktív tag
lao ce nyomdokain továbbgondolkodva talán nem is véletlen, hogy ''fanatikus tag'' a státuszod ;) A kitartásod és az erőfeszítésed tényleg csodálatraméltó. És ezt nem úgy értem, hogy ''jól van pistike, nincs is kockafejed'', hanem komolyan.
Szerintem ha a unit-ok tetejénél kommentekben megjelölöd a forrást, az teljesen OK. Azért értsd meg nagyjából, hogy mit csinálnak, mert szerintem erre is rákérdezhetnek.
A HelpScribble-t nem ismerem sajnos. Talán lao ce igen ;)
Amúgy milyen helpet csinálsz? .hlp lesz a kiterjesztése vagy .chm? A .chm súgók modernebbek és megírhatod sima HTML-ben, képekkel, mindennel, aztán egy ingyenes fordító csinál belőle .chm-et. Egyetlen hátránya, hogy Delphiből nehéz kontextusfüggő súgóvá gyúrni, tehát hogy pl. legyen egy kis kérdőjel az ablakok címsorának jobb oldalán és a program minden gombhoz, kezelőszervhez külön súgótémát mutasson a kérdőjel megnyomása után. Ha csak sima súgó kell, ami pl. F1-re megjelenik egy külön ablakban, akkor ajánlom ezt a HTML-es technikát, elég hatékony. -
lao ce
aktív tag
egyebkent mar akartam irni hogy nagyon jol csinalod amit csinalsz. oszinten mondom, le a kalappal, buszke lehetsz magadra hogy ennyire hatarozottan vegigverekszed magad ezeken a dolgokon.
sajnalom hogy hosszu lett a hozzaszolasom, de ne becsuld le magad annyira, meghogy par ora... en oda illesztenem be a type-ot ahova irtam, keresd meg (ha akarod) az implementation alatt van. -
lao ce
aktív tag
osszeolloztam neked egy unitombol dolgokat
unit Valami;
interface
uses
Windows, ... ;
// ez a delphi dolga, akkor kell babralni ha be kell tenni
// pl a math unitot kezzel mert akarsz hasznalni egy fuggvenyt;
// ez a resz lathato masik formokrol is egesz az implementation szoig
// sajat global procedures, functions amiket speciel en mindig global nevu
// elkulonitett unit(ok)ban tartok, de egye fene most legyen itt egy par:
function GetSystemPath(Folder: Integer): string;
procedure MoveForm(Button : TMouseButton; aForm : TForm);
// ez a formod
type
Tfrm = class(TForm)
...
// innen neha ki kell torolni egy-egy eventet ha a delphi mar elvesziti
// a fonalat hogy mi a fenet is akar a programozo, de joreszt sajat maga;
// elintez mindent;
procedure Button1Click(Sender: TObject);
...
private
{ Private declarations }
// ide lehet beirni sajat funkciokat amik a formra vonatkoznak
// a kozvetlen elonye ezeknek a helyeknek (priv and publ) annyi,
// hogy nem kell leirni az itt deklaralt funkciodon belul hogy
// formneve.labelneve.caption hanem eleg a labelneve.caption.
public
{ Public declarations }
// ez a masik hely, ezeket a dolgokat masik formokrol is meg lehet hivni
end;
const
alma = 'asd';
// ez a formod hehe... 'megtestesulese' es egy sajat globalis valtozo
var
frm : Tfrm;
bela : string;
implementation
// ez a te dogod, a formok kereszthivatkozasai;
uses unitMain, unitDM... ;
// ez a type egy sajat tajpra pelda, lehet tobb is egymas alatt
TEditModes = (
emInsert,
emUpdate,
emDelete,
emView
);
const
korte = 'qwe';
// ezek a unitra vonatkozo sajat valtozok, minden procbol elerhetoek;
var
b : integer;
{$R *.dfm}
// es itt elkezdodik a programod;
nincs idom atnezni, lehet hogy nem tokeletes, lehet javitani. -
lao ce
aktív tag
hat, ha eljutottal akkor miert nem azt mondod mi a baj
a buPrintClick a click eventje a gombodnak
ez meghivja a PrintGrid procot
a sok magyarazat helyett azt mondom, hogy a type-ot a type-ok utan ird, a var-t a var-ok utan. de szerintem vedes elott nezz utana a delphi unit felepitesenek, hatha rakerdeznek aztan illik tudni nagyjabol. -
tusi74
őstag
Ezt még én írtam régebben:
''Szinte minden megy benne, csak még azt csinálja, hogy betöltéskor betölti az 1. kódú dolgozót, az első sorszámú tantárgyfelosztást stb.
És akkor most eldicsekszem, megoldottam teljesen egyedül!!!, saját kútfőből:
Már volt egy gomb, a formon, hogy új művelet, ami azt tudja, hogy rákattintva
a form alapállapotba hozható, azaz minden mező kitakarítódik. Na mármost ezt az eljárást mögé másoltam a formshow-ban megírt frissítő eljárás mögé, és láss csodát frissül is meg tiszta is. Pontosan úgy működik, ahogy szeretném. -
Alan
aktív tag
A debugolás nem vészes, hamar ráérzel és utána már nem is érted, mi volt előtte a gond.
Egy ilyen ciklusnál az i változását akkor látod, ha az ''i := i + 1;'' sorra teszed a töréspontot. Itt megáll a programod, a View menü Debug Windows almenüjéből bekapcsolod a Local Variables ablakot és abban máris kiírja az i értékét. Vagy, még jobb, ha ilyenkor, tehát megállított állapotban a programkódban az i fölé viszed az egered, kis sárga súgóban kiírja az i értékét. F8-cal és F7-tel tudod lépegetve végrehajtani a kódot, az F8 egyben végrehajt minden sort (vagyis pl. a metódushívásokat egyben ''lenyomja''), az F7 belelép mindenbe, akár Delphi VCL programkódjába is, tehát ez alaposabb, eleinte ne használd, mert megzavar. Szóval, ha a beállított sorodon megnyomod az F8-at, eggyel lejjebb lép a Delphi ( az ''end'' sorra), és az i kiírt értéke eggyel megnő.
Az egész akkor működik szépen, ha a programodhoz fordítottál debug infót (Project -> Options -> Compiler, ott a Debug information, Local symbols, Reference info, Use Debug DCUs lehetőségeket pipáld mind ki, utána Project -> Build).
Na?
[Szerkesztve] -
lao ce
aktív tag
1) elsore kikapcsolnam az adatbazis konnekciot, akkor tok uresnek kell lenniuk a dolgoknak. de hogy ezt meg lehet-e tenni tervezestol fugg, ha nem igy lett felepitve lehet hogy egyszerubb a leirason valtoztatni mint a programon. 'mikor belepsz a programba a 'startup plus' kenyelmi szolgaltatas rogton az elso rekordot allitja be a kepernyon', ez az idezetem copyrightos
2) ugy hangzik hogy valami valtozot nem reszetelsz a kereses elott, esetleg egy rossz if statement atugorja a kereses meghivasat. debug, debug, debug. -
CsendPenge
őstag
A FormCreate az adott form konstruktorához kötődik, a FormShow pedig a megjelenítéshez, vagyis ahogy a help írja, amikor a form visible tulajdonság értéke igazra állítódik. Utóbbi nem összetévesztendő az OnActivate eseménnyel.
Vigyázz a FormCreate-el, én soxor szívtam vele, mert van, hogy olyan komponensre hivatkoztam, ami még nem jött létre. (legalábbis azt hiszem, hogy ezért kaptam az AV-ket, meg egyéb anyázást a delphitől)
-
tusi74
őstag
Úgy általában jellemző a progira, hogy közvetlenül az indulás után
másképp viselkedik, mint később.
Pl. írok egy eseményt combobox1.Change-re. Ez az indulás után nem működik.
aztán újabb elemet állítok be a Comboboxon, akkor meg tökéletes. Olyan, mintha az elején még nem élne az adatátvitel.
Erre valakinek ötlete? -
lao ce
aktív tag
-tusi, ha break point-ot raksz ezekre a sorokra, akkor a Combox1.Text -nek es az itemindexnek mi az erteke a sor vegrehajtasa elott?
-tegyel le egy gombot a formra es messagedlg-vel irasd ki az erteket a combo1.textnek. mielott beszursz irasd ki az erteket. jo vagy rossz?
-tegyel breakpointot a gombod programjanak eslo sorara ami a beszurast csinalja es kovesd vegig (f7 vagy f8), nem hivodik-e meg az insert ketszer veletlenul
a break pointot irtam mar neked, mikor ez a problemat eloszor emltetted. azt javaslom probald megtanulni hasznalni, mert e nelkul keptelenseg debuggolni hatekonyan. olyan nincs hogy ketszer ketfele ertekkel hajtodik vegre valami ugy hogy semmi sem valtoztatja meg az ertekeket kozben, szoval valami ossze van kuszalva nalad. ezt a fajta problemat csak ugy 'fejben', bamulva a sorokat nincs sok ertelme megprobalni megtalalni.
[Szerkesztve] -
lao ce
aktív tag
azert a bde mar nem valami tamogatott es javasolt dolog, de gondolom a tanarbacsi azt ismeri. legalabb ado-ig illene felfejlodnie es akkor csak ot evvel lenne lemaradva.
a dbgrid stb hasznalatanak van ertelme sok helyen, de en ugy erzem foleg arra jo ha meg kell mutatni egy recordot. editalasra valoban a 'sima' komponensek rugalmasabbak.
nem tudom miert nem torol recordot. en a helyedben nem vacakolnek sokat azzal hogy hogyan lehet azt kijavitani, feldobnek egy altalanos celu query-t a datamodule-ba amit csak modositasra hasznalok (insert update delete), beallitanam az adatbazis elerest, aztan valami ilyesmi:
procedure genQueryRunDML (aSQL : string);
begin
// data mod language futtatas
qryGenDML.Close; // biztos ami biztos
qryGenDML.SQL.Clear;
qryGenDML.SQL.Add ( aSQL );
qryGenDML.ExecSQL;
// esetleg commit ha kell
end;
procedure genDeleteRecord ( aTableName, aWhereClause : string );
var aSQL : string;
begin
// osszeallit egy delete sql stringet
aSQL := ' delete from ' + aTableName + ' where ' + aWhereClause;
// itt a altalanosan megfogalmazott rakerdezes helye: biztos a torlesben?
genQueryRunDML (aSQL);
end;
proc EnGombomClick...
genDeleteRecord ( 'KedvencTablam', ' MezoID = ' + ValtozoID );
kesz, mert ennek mennie kell ha fene fenet eszik akkor is. ennel persze lehet szebben es jobban csinalni ( pl ha minden ID mezo neve kotelezoen a tabla neve + ID akkor csinosabbra lehet irni , hibakezeles -ha nem sikeredett a torles, stb ) , de ebbol is talan kaphatsz otletet. -
lao ce
aktív tag
ne haragudj a 'gombnyomas kodja' hulye megfogalmazasert. oszinten en kicsit zavarban vagyok neha hogy most magyart vagy angolt hasznaljak. az 'en idomben' meg angol nevei voltak a dolgoknak... no mindegy
KovacsUr persze jol mondta mirol van szo, onClick event program sorok.
D + Ora az nyami, tudok segiteni ugy erzem mindkettoben. csak ird meg hogy milyen adatbazis elerest hasznalsz odbc, ado, esetleg az allround-os doa-t? azt is hogy szabad kezed van oracle-ben, barmit hasznalhatsz (proc, view, trig. stb stb) ? az is erdekes hogy mihez ertesz pl ha sql megy akkor pl/sql is megy, azaz repulnek a package-ek az oracleben a delphi csak megmutogatja a vegeredmenyt?
(es kerlek nekem ne koszonj semmit... nem is ertem... semmit sem csinaltam. (ez a tema lezarva)) -
KovacsUr
addikt
Mi az, hogy ''gombnyomások kódjaira''?
Bocsánat, nem olvastam vissza, de nagyot nem tévedhetek: azokra az eseménykezelőkre (jó eséllyel a formjaid metódusai), amelyek a gombnyomásokat kezelik. Amikor rákattintasz duplán az űrlapszerkesztőben egy gombra, a gomb kattintásakor lefutó eseménykezelő kódjába kerülsz.
Most? -
lao ce
aktív tag
tusi
probalj lerakni break point-okat a gombnyomasok kodjara es f7-tel lepegetni...
hasznald a ctrl + f7 -et hogy megnezhesd az erteket az objektumaid parametereinek (combo itemindex pl)
ne haragudj ha te ezt mar ezer eve csinalod es tudod, nem lekicsinylesbol irtam, hanem hatha nem tudod ezeket es hasznosak hibakeresesnel. -
tusi74
őstag
Azóta van még egy nyűgöm, ami viszont rejtély.
Mondjuk módosítani szeretnék egy rekordot, egy táblában egy gombnyomásra,
vagy beszúrni.
Megcsinálok mindent, teljesen ugyanúgy, mint egy másik táblánál, direkt
Copy-Paste-zok, hogy ami eddig ment, az ezután is menjen.
Erre, most meg mindent úgy csinál, ha megynyomom a beszúr gombot,
akkor beszúrja a Combobox-ok 0. elemét, nem azt, ami aktuálisan be van jeölve, majd megnyomom mégegyszer, akkor beszúrja jól.
Hasonlóan: ha megnyomom a módosít gombot, akkor nem csinál semmit,
ha megnyomom mégegyszer, akkor módosítja.
Na kezdtem megörülni, hárha 2x kell megnyomni a törlés gombot, hogy menjen.
De sajna az egyáltalán nem megy.
Hát itt van az, hogy megáll az ész, és körbenéz.
[Szerkesztve] -
btotyi
tag
Következő kérdés : Milyen Delphi és milyen Query ?
Most próbáltam ki D7 + IBX-el és hibátlanul megy.
Itt a form ami csinálja
object Form1: TForm1
Left = 268
Top = 666
Width = 502
Height = 356
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 8
Width = 385
Height = 289
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object BitBtn1: TBitBtn
Left = 408
Top = 16
Width = 75
Height = 25
Caption = 'BitBtn1'
TabOrder = 1
OnClick = BitBtn1Click
end
object IBDatabase1: TIBDatabase
Connected = True
DatabaseName = 'C:\DB\adr.gdb'
Params.Strings = (
'user_name=adruser'
'password=adrpasswd'
'lc_ctype=WIN1250')
LoginPrompt = False
Left = 16
Top = 16
end
object IBTransaction1: TIBTransaction
Active = True
DefaultDatabase = IBDatabase1
Left = 16
Top = 48
end
object IBQuery1: TIBQuery
Database = IBDatabase1
Transaction = IBTransaction1
CachedUpdates = True
SQL.Strings = (
'select * from FELHASZNALOK')
UpdateObject = IBUpdateSQL1
Left = 48
Top = 16
object IBQuery1FELH_AZON: TIntegerField
FieldName = 'FELH_AZON'
Origin = '''FELHASZNALOK''.''FELH_AZON'''
ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
Required = True
end
object IBQuery1NEV: TIBStringField
FieldName = 'NEV'
Origin = '''FELHASZNALOK''.''NEV'''
Required = True
Size = 30
end
object IBQuery1USERNEV: TIBStringField
FieldName = 'USERNEV'
Origin = '''FELHASZNALOK''.''USERNEV'''
Required = True
Size = 12
end
object IBQuery1JOG_KTGH: TIBStringField
FieldName = 'JOG_KTGH'
Origin = '''FELHASZNALOK''.''JOG_KTGH'''
Size = 3500
end
object IBQuery1STATUS: TIBStringField
FieldName = 'STATUS'
Origin = '''FELHASZNALOK''.''STATUS'''
FixedChar = True
Size = 1
end
end
object IBUpdateSQL1: TIBUpdateSQL
RefreshSQL.Strings = (
'Select '
' FELH_AZON,'
' NEV,'
' USERNEV,'
' JOG_KTGH,'
' STATUS'
'from FELHASZNALOK '
'where'
' FELH_AZON = : FELH_AZON')
ModifySQL.Strings = (
'update FELHASZNALOK'
'set'
' FELH_AZON = : FELH_AZON,'
' JOG_KTGH = : JOG_KTGH,'
' NEV = :NEV,'
' STATUS = : STATUS,'
' USERNEV = : USERNEV'
'where'
' FELH_AZON = : OLD_FELH_AZON')
InsertSQL.Strings = (
'insert into FELHASZNALOK'
' (FELH_AZON, JOG_KTGH, NEV, STATUS, USERNEV)'
'values'
' (: FELH_AZON, : JOG_KTGH, :NEV, :STATUS, : USERNEV)')
DeleteSQL.Strings = (
'delete from FELHASZNALOK'
'where'
' FELH_AZON = : OLD_FELH_AZON')
Left = 80
Top = 16
end
object DataSource1: TDataSource
DataSet = IBQuery1
Left = 48
Top = 48
end
end
A kettőspont utáni szóközöket vedd ki mert a PH motor emotikonoknak látja az SQL paraméterek. ( Hiányzik a [CODE] tag a PH-ból ?)
[Szerkesztve] -
lao ce
aktív tag
ha az eredmeny megjelenik az elso formon is vizualis formaban (mondjuk label-en) akkor valaszthatod azt is, hogy kozvetlenul elered.
miutan csendpenge tanacsa szerint a masodik form forrasanak a uses reszebe beirod az elso unitodat,
{
implementation
uses
untElso;
}
a masodik unitbol el tudod erni az elso unit formjan levo objektumok erteket.
tehat untElso.frmElso.lblEredmeny.Caption
es azt hogy untElso el lehet hagyni ha akarod.
csak azert irom, mert sokszor csak ki kell irni valamit a kepernyore az ilyen helyzetekben es szerintem ilyenkor felesleges valtozot hasznalni a 'masodik formokon', aztan hatha ez a helyzet nalad is veletlenul. -
CsendPenge
őstag
Valamelyik formnál, vagy a form unit-ban csinálj egy globális változót, plussz uses unit
Ez utóbbi nélkül nem fog menni.
P.S.: véletlenül se a gombnál deklaráld a változód, mert akkor a gomb eseményére nézve lokális lesz, vagyis addig létezik a változó, amíg az esemény ''létezik''.
P.S.2: ha nem voltam eléggé értehtő, szólj és kifejtem magamat -
lao ce
aktív tag
Új hozzászólás Aktív témák
Hirdetés
- Vezetékes FEJhallgatók
- EA Sports WRC '23
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- India felől közelít egy 7550 mAh-s Redmi
- Mibe tegyem a megtakarításaimat?
- Telekom mobilszolgáltatások
- Otthoni hálózat és internet megosztás
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...
- ÁRGARANCIA! Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- Bomba ár! Lenovo ThinkPad X250 - i5-5GEN I 8GB I 128GB SSD I 12,5" HD I Cam I W10 I Garancia!
- Telefon felvásárlás!! Apple iPhone 16, Apple iPhone 16e, Apple iPhone 16 Plus, Apple iPhone 16 Pro
- Dell és HP szerver HDD caddy keretek, adapterek. Több száz darab készleten, szállítás akár másnapra
- Xiaomi Redmi Note 14 5G
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest