www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Prvi koraki v Delphiju - 20-ti dan.
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 30, 2007 9:12 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Recimo tale tvoja procedura mi osebno deluje čisto domače. FOpen,FWrite,Fseek,Fclose je za binarni dostop do datoteke poznal Clipper že pred 20-timi leti. Procedura v Dosovih časih bi bila napisana skoraj popolnoma enako. Proceduro "BlockWrite" katero je uporabil Aly pa ne poznam. Sem mislil, da je to novejše Wink....


'BlockWrite' izvira iz časov, ko še ni bilo pravih operaciskih sistemov temveč so to bili disk operacijski sistemi (DOS). Disk je pač razdeljen na sektorje najkrajša možna dolžina sektorja je 128 byte-ov (normalno se formatira na 512 byte-ov) in toliko posledično tudi znaša 'default' dolžina zapisa funkcije 'BlockWrite'. No, to se je kasneje še vleklo in vleklo tako da tudi Delphi zaradi back-kompatibilnosti še vedno pozna omenjeno funkcijo.

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 59.91
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Tor Okt 30, 2007 11:42 pm    Naslov sporočila:   Odgovori s citatom

BlockWrite procedura ima še danes svoje prednosti pred ostalimi načini zapisovanja. Je namreč za razred hitrejša. Logično, saj deluje na precej nižjem nivoju kot ostale. Podobno velja za BlockRead.
_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Okt 31, 2007 9:52 am    Naslov sporočila:   Odgovori s citatom

VolkD je napisal/a:
BlockWrite procedura ima še danes svoje prednosti pred ostalimi načini zapisovanja. Je namreč za razred hitrejša. Logično, saj deluje na precej nižjem nivoju kot ostale. Podobno velja za BlockRead.


Tvoja trditev drži le za DOS oziroma enonitne sisteme.
Od Windovs NT dalje ni več tako, BlockWrite in BlockRead sta zgolj simulirani funkciji, kličeta pa WriteFile in ReadFile jedrni funkciji.
Kakršenkoli direkten dostop do trdega diska na nivoju aplikacije programa pod NT in XP ni več dovoljen oziroma mogoč, saj bi s tem razbil optimizacijo branja in pisanja po disku, ki jo nadzira API.
Več nitni operacijski sistemi si tega enostavno ne morejo privoščiti, za pretok podatkov in njihovo optimizacijo branja in pisanja skrbi API (jedro oziroma ring0), kar znatno dvigne hitrost prenosa podatkov na disk in z diska.
WriteFile in ReadFile uporabljajo optimizacijo in 'buffer-je' za svoje delovanje. Pisanje na disk tako ni trenutno temveč ima zakasnitev nekaj 10 ms.
Šele, če kličemo funkcijo FlushFileBuffers ali pa CloseFile ta resnično zapiše stanje fila na disk in se vrne v program.


LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 59.91
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Sre Okt 31, 2007 11:24 am    Naslov sporočila:   Odgovori s citatom

GJ je napisal/a:
BlockWrite in BlockRead sta zgolj simulirani funkciji, kličeta pa WriteFile in ReadFile jedrni funkciji.

Drži ! Velja pripomniti, da ima ta simulacija v DOS emulatorju za win xp v primeru, da se gre za datoteke manjše od enega clustra tudi bug, ki ga do sedaj še niso odpravili.
Pri zapisu tako majhne datoteke z funkcijo blockwrite se datoteka na disku sicer ustvari, a je njena vsebina napačna.
Povedano velja torej le za programe, ki so pisani v Borland Pascalu in se izvajajo v DOS emulatorju.

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sre Okt 31, 2007 6:01 pm    Naslov sporočila:   Odgovori s citatom

Za tiste, ki želijo vedeti kaj več o Delphi programiranju priporočam knjigo Delphi 6 Developer's Guide.

Pdf knjige si lahko ogledate na: http://ultra.obuda.kando.hu/~vamossy/HP/D6DG.pdf Wink

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Čet Nov 01, 2007 6:45 pm    Naslov sporočila:   Odgovori s citatom

Vprašanje glede baze. Imam paradoxovo bazo z primarnim in sekundarnim indeksom. V določenem primeru bi rad indekse popolnoma izključil. Je to možno?
Kako je s fizičnim sortiranjem baze? Kako izvede kopiranje objekt BatchMove v primeru kopiranja? A bodo v drugi bazi, kamor se kopira podatki fizično sortirani (v primeru, da obsaja primarni indeks), ali se naredi le kopja baze.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.61
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Nov 05, 2007 11:33 am    Naslov sporočila:   Odgovori s citatom

GJ, hvala za namig.

Problem, ki je bil še vedno odprt in sem ga komaj sedaj uspešno rešil, pa je z dejansko sintakso Write ukaza.
Recimo da je var S : string;
V tem primeru BlockWrite(FileSave, S, Length(s)); je S pointer na podatke o stringu in ne na dejanski string. Pravilna sintaksa je takšna, da se Write funkciji poda začetek stringa S[0] Exclamation

torej: BlockWrite(FileSave, S[0], Length(s));

To velja za vse Write funkcije.

GJ je napisal/a:
Pri Array-ih je podobno. SizeOf(MojArray) vrne dolžino Array-a.

Ne, SizeOf (MojArray) vrne le velikost enega samega elementa v arrayu. Preizkušeno. To je potrebno pomnožiti še z Length (MojArray) da dobiš dejansko velikost arraya v RAM-u (v bytih).

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.61
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Nov 05, 2007 2:47 pm    Naslov sporočila:   Odgovori s citatom

GJ, še nekaj iz Delphi Help-a za FileOpen:
Citiram:
Note:
Use of the non-native Delphi language file handlers such as FileOpen is not encouraged. These routines map to system routines and return OS file handles, not normal Delphi file variables. These are low-level file access routines. For normal file operations use AssignFile, Rewrite, and Reset instead.

Exclamation

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Nov 05, 2007 4:40 pm    Naslov sporočila:   Odgovori s citatom

aly je napisal/a:
GJ, še nekaj iz Delphi Help-a za FileOpen:
Citiram:
Note:
Use of the non-native Delphi language file handlers such as FileOpen is not encouraged. These routines map to system routines and return OS file handles, not normal Delphi file variables. These are low-level file access routines. For normal file operations use AssignFile, Rewrite, and Reset instead.

Exclamation


Poudarek je na citiram: 'For normal file operations use AssignFile, Rewrite, and Reset instead'.
FileOpen ni konvecionalna Delfijeva funkcija. Je pa zato AssignFile izpeljan iz ustreznega API klica!
Večina, če ne vsi Delpfijevi objekti uporablajo FileOpen , FileRead, FileWrite itd. za dostop do datotek. Sploh v primeru, če se želimo sprehajati po datoteki hitro in brez problemov.

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Sob Nov 24, 2007 8:57 pm    Naslov sporočila:   Odgovori s citatom

Vsaj eno uro sem iskal vzrok za "ne"znano težavo. Mislim, da je prav, da težavo opišem. Šlo je za cenik s te povezave.

Kaj se je dogajalo? Program sem pisal na namiznem računalniku, včeraj vse skupaj prekopiral na prenosnik. Ker so v rabi baze sem dodal še ustrezne dll-je. Program je na prenosniku delal brez problema. Včeraj sem prenosnik pobasal, ter ga nesel s sabo v službo. V službi hočem pognati cenik - glej ga zlomka - program se sesuje. Shocked Ok, sem mislil se je nekaj zgodilo z bazo - snamem vse skupaj s foruma. Program ne dela. Shocked Prav, sem mislil. Bom že ugotovil kje je problem. Danes je sledilo še večje presenečenje. Ko sem računalnik vključil doma je program DELAL normalno. :bonk: Edina možnost - program nekaj "pobira" z računalnika, na katerem je bil ustvarjen. Izključim mrežo - program se sesuje. Moja trditev drži. Odmaknem vse mape ter datoteke v skupni rabi. Računalnik še vedno dela. Ostal je le še tiskalnik. Odmaknem tudi tiskalnik. Program se sesuje. Na prenosniku sem uporabljal tiskalnik, ki je bil v skupni rabi in je bil definiran kot prevzet. Ko sem kot prevzet tiskalnik definiral "Image Writer" je program delal tudi brez mreže.
Vprašanje Delphi "maherjem".
V programu sem uporabil za izpis nekaj objektov QReport-a. Kako pravilno pisati proceduro, da do podobnih težav ne bi prihajalo? Obstaja kaka funkcija, ki prevera stanje tiskalnika?

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 25, 2007 1:36 am    Naslov sporočila: icon_mocker  Odgovori s citatom

Ne 'handlaš' vseh možnih napak!
Nekje ti manjka..
Koda:
try
...
except
...
end;


LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Ned Nov 25, 2007 1:56 am    Naslov sporočila: icon_sad  Odgovori s citatom

GJ je napisal/a:
Ne 'handlaš' vseh možnih napak!
Nekje ti manjka..
Koda:
try
...
except
...
end;


LP GJ


Res, varnostnega bloka v izpisu nisem uporabil - programsko namreč niti ne pride do njega. Program se "zaganja" kakih 5sec nato "crkne". Sploh ne vem, kje naj uporabim varnostni blok.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 25, 2007 2:19 am    Naslov sporočila:   Odgovori s citatom

Takole na pamet, ker ne vem kakšne printer komponente uporabljaš..

Program verjetno poizkuša odpreti dostop do printerja (verjetno preko API klica ali preko kakšne dll), ki pa ga žal neuspešno išče, zato 'raise-a' napako, ki ga posledično sesuje.

V programu (lahko imaš že v sami komponenti) nekje kličeš nekako takole..
Koda:
Printer1.Open;


moralo pa bi biti..

Koda:
try
  Printer1.Open;
except
...
end;


No vsaj mislim, da je tako. Wink


LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Ned Nov 25, 2007 2:32 am    Naslov sporočila:   Odgovori s citatom

Hvala, bom pogledal popoldan. Sedaj sem v službi. Programa nimam s sabo.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pet Nov 30, 2007 1:58 pm    Naslov sporočila:   Odgovori s citatom

Kako poinstalirati LCDNumber ?
So potrebne komponente zraven instalacije Delpihija?



"Eksterni" SerialNG za komunikacijo s seriskim portom mi je uspelo namestiti (ne vem točno kako Embarassed ampak dela)


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
Stran 4 od 5

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group