Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
?HTML-ben a Flash átméretezés torzul
Eredeti mezőnevek lekérdezése
?Input mezőből visszakapott adat probléma
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Társalgó

»

Adatbáziskezelés

»

Clipper kontra XP

»

Clipper kontra XP

nyitotta: madmax, idő: 2002.07.03., moderátor: netangel
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió
Sorrend:
Időzóna:
Blokkméret:
Sziasztok!

Úgy tünik a korábbi Clipperes kérdésekre nem nagyon reagált senki, azért én megpróbálom, hátha felkeltem valakinek az érdeklődését.

Egészen Win98/Me szintig nem volt gondom a Clipperes progik futtatásával. Bezzeg az XP! Nagyot alakitottak!
A következö kérdések mindegyikére két kategóriában keresek választ, Clipper Summer'87 és 5.2.

1. Tud valaki, még müködő, magyar Clipperes levlistáról?

2. A nyomtatással mindjárt két gondom van
2/a.) 200..
Szia!
Megköszönném ha a minigui.tvn.hu -ra összeszednél egy
leírást , ott azt gondolom hogy lesz jelentkező.
Azt gondolom,hogy a címlapon kellene egy mit hogyan csinálsz
esetleg leírások linkjei.
ha úgy gondolod akkor esetleg küldheted az anyagoz a
minigui.extra.hu kukac gmail.com -ra.
Lehetséges ,hogy a grafikus griddel ösze lehet "házasítani"!

Köszi! előzmény
Nem így értettem. Működik rendesen nálam, gondoltam, hátha más is foglalkozik vele és akkor lehet tapasztalatot cserélni.
A dbf-es adatbázisaimat pakoltam át egy FB adatbázisba, magyar rendezési sorrenddel. Az embedded változatot használom, mert azt nem kell telepíteni, csak másolni, de a teljes rendszerrel is hasonlóan egyszerű dolgozni. előzmény
Szia!
Ezt nézegettem korábban a neten , az xharbour -ra találtam különféle javaslatokat , a harbour -nál is van contrib hozzá,
de ez megrekedt egy szinten, nem nagyon találtam rá példát.
Pedig ,ha a mysql-nek egyszer "betesz" az Oracle(megvette a mysql AB-t) akkor talán szükség lenne rá vagy a postgradesql-re.
De az ámítástechnikában minden nap változik valami
Üdv!
előzmény
Használja valaki a Harbourhoz a Firebird adatbáziskezelőt?
Megtaláltam.
Elvileg a harbour.exe-t is lehet így paraméterezni, de ugye azt a make (hbmk2.exe) hívja meg, így macerásabb a paraméterek hozzászerkesztése, de nem is akarom bolygatni a HMG belső dolgait, mert akkor újratelepítésnél kimaradhat.
Környezeti változóként is megadható, de az megint külön beállítás és ráadásul a parancssori kapcsolók felülbírálják.
Viszont megoldható a forrásszövegen belül is erre használható a #pragma direktíva, aminek a használatához van doksi (harbour\doc\pragma.txt)
Ebben le van írva:
#pragma <Expression>[=On/Off] or
#pragma -CompilerFlag[+|-]
* Command Switch
-----------------------------------------------
* AUTOMEMVARS =<On/Off> /A<+/->
* DEBUGINFO =<On/Off> /B<+/->
* ENABLEWARNINGS =<On/Off> /W<+/->
* EXITSEVERITY =<nLevel> /E<nLevel>
* FORCEMEMVARS =<On/Off> /V<+/->
* LINEINFO =<On/Off> /L<+/->
* NOSTARTPROC =<On/Off> /N<+/->
* PREPROCESSING =<On/Off> /P<+/->
* WARNINGLEVEL =<nLevel> /W<nLevel>
* SHORTCUTTING =<On/Off> /Z<+/->

Valamiért pont az automemvars-ra hibát ír, de így viszont megy:
#pragma /A+
Eddig is beállítottam a /w paraméter:
#pragma ENABLEWARNINGS=On
A Harbour viszont figyelmeztetéseket ír egyes field deklarációkra:
A field sorára:
Warning W0002 Ambiguous reference, assuming memvar '_HMG_SYSDATA'
A mező használatánál:
Warning W0001 Ambiguous reference 'MEZO'
De nem mindenhol. Ha jól látom, akkor az index on esetén nem problémázik, de pl. append-nél igen.
---------------------------
Rájöttem, akkor problémázik, ha a field után csak 1 mező van megadva. Pl.:
field mezo
Ha vesszővel elválasztva több mező, akkor nincs vele baja:
field mezo, placebo // Hogy a Harbour ne adjon figyelmeztetést
Érdekes!
Ez magyarázza, miért van a látszólagos különbség.
A harbour-nak is van -a kapcsolója. Azt nem tudom, hogyan kell a hmg-ben beállítani, de biztosan van rá lehetőség. előzmény
Bocs. Kifelejtettem, hogy én -a -val fordítok.
Ez megoldható Harbour alatt?
Jó, a sorrend tényleg mindegy, úgy látszik belekavarodtam a sok próbába.
De ez a kód clipper alatt ugyanúgy elszáll, mint harbourban:
//test1
proc main
private alma[10]
use valami
afill(alma, 1)
kivéve, ha -a-val fordítom.

A memvar deklaráció pedig fölösleges (kellene, hogy legyen), mivel a private is deklaráció.
Ha deklaráció is lenne, akkor a -a kapcsoló lenne felesleges.
Deklarátor a field, local, memvar, static, illetve a függvény paraméterei a zárójelek között. A public, private, parameters csak létrehozza a változókat, de ha -a-val fordítod, akkor deklarálja is.

1. memvar deklarációt nem előzheti meg private,
Viszont a memvar az adott blokkon belül, vagy modul szinten globálisan, megelőzheti a private-ot, és ekkor az adott név egyértelműen memvar lesz:
//test2
proc main
memvar alma
private alma[10]
use valami
afill(alma, 1)
vagy
//test3
memvar alma
proc main
private alma[10]
use valami
afill(alma, 1)
Ez a kód egyikben sem száll el

2. ugyanazt a változót nem lehet memvar-ral és private-tal is deklarálni.
Lehet, sőt kell(ene) is, hogy a -w esetén nem legyen warning. Hibát akkor okoz, ha -a-val fordítod és explicite deklarálod is (kivéve a modul szintű memvar-t). A test2 kód -a-val nem fordítható!

A fenti kódokat clipper és xharbour-ral lefordítva nem látok különbséget. Automatikus vagy explicite memvar deklaráció esetén az afill felhívásakor PUSHM(clipper)/HB_P_PUSHMEMVAR(xhb), anélkül a PUSHV/HB_P_PUSHVARIABLE pszeudokódot generálják.

Kipróbáltam clipper 5.01a és 5.2e-vel is. előzmény
Clipperben lényegtelen, hogy mikor nyitod az adatbázist, mindig a memóriaváltozót fogja visszaadni.
A memvar deklaráció pedig fölösleges (kellene, hogy legyen), mivel a private is deklaráció.
Szerintem hibázás elkerülés szempontjából a Clipperes megoldás a jó, mert alias-> előtaggal mindig adatbázismezőre, míg anélkül memóriaváltozóra szoktunk hivatkozni.
Ja, és a fenti példáidat próbáld ki Clipperben vagy Harbour-ban, mert hibásak.
1. memvar deklarációt nem előzheti meg private,
2. ugyanazt a változót nem lehet memvar-ral és private-tal is deklarálni. előzmény
Időközben rájöttem, mi a különbség a clipper és a harbour között.

Clipperben, ha nincs memvar deklaráció, akkor ha a dbf nyitás után van a private definíció, akkor a private változót fogja előbb megtalálni, fordítva az adatbázis mezőt. A harbour ezzel szemben deklaráció nélkül mindig az adatbázis mezőt találja meg. Én ezt inkább a clipper (nem egyedüli) hibájának tartom, amit kijavítottak a harbour-ban, igaz, ezzel picit sérül a kompatibilitás. előzmény
A problémát meg tudtam kerülni (átneveztem a kritikus változókat), de mint írtam, ez nem a megoldás. A megoldás az lenne, ha lett volna kapcsoló a helyes (Clipper azonos) működéshez. Mivel nincs, így hibás a HMG. De megszoktam, hogy a hibákat meg kell kerülni, ha máshogy nem megy. Azért köszi a segítséget.
Még egy kicsit vizsgálódtam. Az alábbi kód clipper és xharbour alatt teljesen egyformán viselkedik:
// memvar alma
proc main()
private alma[10]

fn(alma)
? "main: valtype(alma)", valtype(alma)
? "main: type('ALMA')", type("ALMA")

use valami

fn(alma)
? "main: valtype(alma)", valtype(alma)
? "main: type('ALMA')", type("ALMA")

afill(alma, 1)
? "afill() OK"

function fn(v)
? "fn: valtype(v)", valtype(v)
? "fn: valtype(alma)", valtype(alma)
? "fn: type('ALMA')", type("ALMA")
return NIL
Ha -a kapcsolóval fordítom, akkor az fn()-ben az ALMA hivatkozást meg fújolja, de hibátlanul lefut.
-a kapcsoló nélkül az összes ALMA hivatkozásra warning-ot dob, és hibás lesz.
Ha a memvar-t berakom, akkor mindegy hogyan fordítom, jó lesz az eredmény.
előzmény
Hát erre csak annyit tudok mondani, hogy nagyjából hasonló project minimális ilyen jellegű zavarral simán átment xharbour alá. Egy modulban voltak public változók, másutt csak local/static, a közös dolgok paraméterként utaztak. Az is igaz, hogy a clipper'87 kód a clipper 5-re eleve így lett átírva, de az sem tegnap történt, hanem majd 20 éve.

Amúgy ez tényleg eltérő viselkedésnek tűnik, jelenteni kellene a fejlesztőknek.

Dolgoztam egy kicsit a problémádon:
a private után, meg mindenhol, ahol használni akarod a változót írd be a memvar deklarációt is.
proc main()
private alma[10]
memvar alma

fn(alma)
? type("ALMA")
use valami
fn(alma)
? type("ALMA")

afill(alma, 1)
return

function fn(v)
memvar alma
? valtype(v)
? valtype(alma)
return NIL

Xharbour alatt működik. előzmény
A private nem helyettesíthető sem a static sem a local deklarációval.
Ha olyan változóra van szükségem, ami a létrehozó függvényben és az összes ebből hívott függvényben elérhető kell legyen, akkor csak ezt használhatom. Nincs gondom a változó deklarációkkal és azok hatókörével. A gond, mint írtam a HMG Clippertől eltérő működésével van. A HMG nem ugyanúgy működik, mint a Clipper. Ez hiba függetlenül attól, milyen változókat használok. A problémát meg lehet kerülni, de az nem "a megoldás".
Egy 140.000 soros programban nem olyan egyszerű a HMG hibái miatti foltozgatás. De eddig megoldottam. Várom a következő problémát. előzmény
Ne használj feleslegesen public/private/parameters változókat. Rossz gyakorlat.

A függvényen belül local, modulon belül static változókkal ugyanazt elérheted. Csak a ténylegesen globális változók legyenek public-ok.

Ha a példádban a sorszam változó local, akkor úgy működik, ahogy elvárod.

De ha ragaszkodsz a private-hoz, akkor használd így:
proc main()
private alma[10]

use valami // van benne alma mező
afill(m->alma, 1)
előzmény
Köszi, már rájöttem, ne fáradjatok. előzmény
Szerintem félreérted.
A Clipperben mindig a memóriaváltozó élvez elsőbbséget, mivel az adatbázismezőkre, ahogy írod, alias->mező formában illik hivatkozni. Ez a HMG-ben is így van, kivéve ha tömbváltozót függvény paraméterként használok. Például ha a következő programrész alatt nyitva van egy adatbázis amiben van sorszam nevű mező, akkor kiakad a program.:
private sorszam[10]
afill(sorszam,3)
-w-vel fordítok, de az csak azt hozza hibának, ha hiányzik egy változó deklarációja. Az azonos nevű adatbázismezőket nem tudja megkeresni, mivel a fordító nem lát bele az adatbázisokba, amik futásközben nyitva lesznek.
És hiába írod be a memvar-t, akkor is kiakad, mivel az adatbázismezőt adja át az AFILL()-nek előzmény
Sziasztok!

Meg tudnátok mondani, hogy xharbour-ben a GetOpenFileName parancsba milyen paramétert kell beküldenem és a file nevét kapom vissza válaszként?

Köszi: Zorró
Szerintem ez nem hiba, ha nincs megmondva egyértelműen, hogy egy név mögött mit keressen, akkor először az aktuális munkaterületen keres egy adott nevő mezőt, utána keres a public/private változók között.

Ha -w-vel fordítanál, akkor látnád, hol nem egyértelmű a változó hivatkozás.

Nagyon rossz gyakorlat, hogy lustaságból csak a nevével történik hivatkozás a mezőre, mikor már a dbaseiii-ban is lehetett alias->mezo formában használni. Ha így használod mindenhol, és nem használsz feleslegesen public/private/parameters memória változókat, hanem ahol lehet static/local-okat, valamint a -w fordításkor nem ad warningot, akkor ilyen probléma nem nagyon fordulhat elő.

Egyébként már a clipper'87-ben is meg lehetett adni, hogy a memória változók között keressen, M->nev formában. Ez a harbour-ban sem tilos. A deklarációs részben is elő lehet írni:

static function fn(_par1, _par2)
memvar  publictomb
...
afill(publictomb, ...)
...
return NIL
előzmény
Kísérleteztem vele és ha adatbázismezővel azonos nevű tömb is létezik, akkor függvényparaméterként használva nem a tömböt adja át, hanem az adatbázis-mező-t. Azért ez gáz.
Köszönöm az eddigi segítséget.
Még arra keresek megoldást, hogy a Clipperrel ellentétben a HMG a memória változó helyett az adatbázis mezőt éri el, ha azonos a nevük az AFILL() fv-ben. Így a tömb helyett az adatbázismezőt akarja feltölteni értékkel, persze mivel az nem tömb, kiakad (szerencsére).
Ezt valamilyen beállítással ki lehet küszöbölni? Mert ez szerintem hibás működés a HMG-ben. Akkor is, ha programozásilag sem helyes.
Köszi előre is.
inline_c.prg előzmény
Köszönöm a fáradozásod. A Harbourba be lehet szúrni C++ forráskódot? Mert külső fordítást és hozzászerkesztést elkerülném, ha lehet. A Harbour saját könyvtáraiba sem akarok belepiszkálni.
Viszont, elindultam az alapján, amit írtál, és találtam egy FileStats() fv-t, amivel meg tudtam oldani. A Harbour-project oldaláról egy mintapélda:
      LOCAL cFileName := "FILESTATS.PRG"
      LOCAL cFileAttr  , nFileSize
      LOCAL dCreateDate, nCreateTime
      LOCAL dChangeDate, nChangeTime

      ? FileStats( cFileName, @cFileAttr  , @nFileSize  , ;
                              @dCreateDate, @nCreateTime, ;
                              @dChangeDate, @nChangeTime  )

      ? "File statistiscs"
      ? "File Name :", cFileName
      ? "Attributes:", cFileAttr
      ? "File Size :", nFileSize
      ? "Created   :", dCreateDate, TString( nCreateTime )
      ? "Changed   :", dChangeDate, TSTring( nChangeTime )
Az igazat megvallva, én az xharbour forrásokat néztem, a harbour egy kicsit bonyolultabb, de azon is el lehet menni, csak követni kell a _hb_fileStart, hb_fsFindFirst vonalat. A vége a winapi FindFirstFile/FindNextFile/FindClose lesz.

A dátum lekérdezés kódja:
HANDLE h;
WIN32_FIND_DATA ff;
FILETIME ft_utc, ft_local;
SYSTEMTIME st;
char dates[9];

h = FindFirstFile(hb_parc(1), &ff);
ft_utc = (ff.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? ff.ftCreationTime : ff.ftLastWriteTime;
FileTimeToLocalFileTime(&ft_utc, &ft_local);
FileTimeToSystemTime(&ft_local, &st);
snprintf(dates, sizeof(dates), "%04d%02d%02d", st.wYear, st.wMonth, st.wDay);
FindClose(h);
hb_retds(dates);

Az idő ez alapján már csak menni fog. előzmény
Köszönöm a segítséget, de nem sikerült megoldást találni.
Ennyi a fv. kódja:

HB_FUNC( FILETIME )
{
   PHB_FFIND ffind = _hb_fileStart( FALSE, HB_FA_ALL );

   hb_retc( ffind ? ffind->szTime : NULL );
}
Az adatdeklarációban csak 1 dátum és idő van, így gondolom, ebből a többi nem érhető el.
Egy Win32 API-s fv. hívás lehet, hogy jobb lenne.
Lehúzod a harbour forrását, megkeresed benne a filetime() függvényt (files.c) és vagy megmódosítod és újtafordítod a lib-et, vagy az alapján írsz egy saját függvényt, pl xfiletime() néven.

Egyébként ahogy elnézem, van legalább két bug abban az egy piciny függvényben. előzmény
A fentieket megoldottam. Úgy látszik a HMG több ponton nem kompatibilis a Cliperrel.
A következő problémám a FILETIME() függvény, ami állományok esetén az állomány utolsó módosításának idejét adta vissza, viszont könyvtárak esetén (pl.
FILETIME("C:\Windows",16)
a könyvtár létrehozásának idejét, míg a HMG itt is az utolsó módosítás idejét adja vissza.
Tudtok olyan megoldást, függvényt, amivel egy könyvtár létrehozási dátumát és idejét le lehet kérdezni?
PS: A HB_FGETDATETIME() fv. nem működik könyvtárakra.

A HMG-ben Win32 API hívásokat hogyan lehet megoldani?
Újabb problémába ütköztem: A get-ek bekérésénél a mező háttérszínét változtatgatja A háttérszín, fekete és az eredeti piros között.
Saját get kezelőm van, ami a "fókuszban" lévő get mezőt világosabb pirossal rakja ki.
Mi lehet a megoldás?
Köszi előre is.
Ezt is megtaláltam:
#ifdef __HARBOUR__
  ? "Harbour"
#else
  ? "Clipper"
#endif
  inkey(0)
...
Ja, bocs, nem figyeltem, hogy már jött megoldás. Köszönöm szépen.
__HARBOUR__
__XHARBOUR__
előzmény
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Hack100
»Riha60
»Akhiles50
»mrchandra50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen