Šta je novo?

pomoc oko Delphi-a i baza podataka

smez

Slavan
Učlanjen(a)
24.05.2005
Poruke
74
Poena
310
imam 3 pitanja:

1. kada se napravi program koji radi pomocu baza podataka (pravio sam tabele iz database desktop-a) i kada se taj program prebaci na drugi racunar program nece da radi. praktikujem da DB bude u 'work direktorijumu' i takodje kad se ceo 'work dir' prebaci bilo gde drugde na harddisk (na istom racunaru) program nece raditi. trazice DB tamo gde je bio, tacnije tamo gde je napravljen "alias".
kontam da je to verovatno do tog alijasa ali kako da se napravi da program pri startovanju potrazi da nije slucajno DB u istom folderu kao i program?

2. u databazi moguce je stavljati slike kada se svojstvo sloga stavi da bude "binary". medjutim, nikako ne mogu ubaciti JPG u databazu? zasto? moze samo BMP, ICO i jos neki drugi fajlovi. (koristim open picture dialog za ubacivanje slike)

3. kad ubacim slike fajl u DB i snimim tabelu, onda se kako vidim (mada nisam siguran) sve slike cuvaju u fajlu 'nesto.MB' (to je jedan od fajlova koji se napravi kada se napravi i DB). medjutim kada izbrisem celu tabelu i snimim tabelu taj fajl ce ostati iste velicine, nece se smanjiti. moze da predstavlja problem ako su slike velike pa kad ih izbrisem one se nece pojavljivati u tabeli i programu ali ce ostati "nagomilane" u tom fajlu.
mozda pravim gresku pri brisanju tabele? ne znam kako drugacije to da radim pa brisem slog po slog:

while not table1.eof do
table1.delete;
 
1. Da bi tvoj program radio na drugom racunarau potrebno je da napravis Install shield verziju . Dolazi Program koji to radi uz Delphi.

U njemu napravis projekat gde izaberes koje fajlove da distribuira. (Tvoj EXE , fajlovi baze ) Ako koristis BDE onda ga moras ukljuciti u distribuciju.

BDE povecava setup za nekih 5-6 MB.

2. JPG mozes suvati kao Binary stream i kao takav mozes ponovo izvlaciti iz baze. Koristi Load From Stream Na Picture Objektu.

3. Nisam siguran .
 
Poslednja izmena:
1. hmmm... ni na kraj pameti mi ne bi palo da pravim instalaciju... no nebitno, opet nece da radi. opet DB trazi u folderu u kojem je bio dok sam pravio instalaciju a ne u folderu koji je napravljen instalacijom. nisam mnogo koristio install shield, ima mnogo opcija, pa ako znas tacno gde trebam da stavim podatke za DB bio bih ti zahvalan.

nemam vremena da se sad zanimam sa tim, uvece cu sam da pokusavam sa tim instalacijama pa se javljam da li sam uspeo. kad ti kazes, verujem da tako moze da se napravi...

2. nemam tu funkciju "load from stream"... algoritam za ubacivanje slike izgleda ovako:

if openpicturedialog1.Execute then
begin
Table1.Last;
Table1.Edit;
dbimage1.Picture.LoadFromFile(form1.openpicturedialog1.FileName);
Table1.Post;
end;

umesto tog LoadFromFile jednostavno se ne moze staviti LoadFromStream kako si ti napisao.
 
1. Odavno nisam radio sa BDE/Paradoxom, ali ako me secanje ne vara, nikakav alias ti ne treba. Ako imas na formi TDatabase objekat (na koji vezes svoje tabele i queryje), samo taj objektu ime (npr "mojabaza") i u params property ubaci ovakvu tstrings listu:

PATH=c:\temp\
DEFAULT DRIVER=PARADOX
ENABLE BCD=FALSE

i onda otvaras bazu. Stavis to u svoju neku funkciju "connectToDB". Putem params propertyja mozes da posaljes recimo i username/pass kombinaciju (ako koristis pass, a ne zelis da vidis onaj ruzni login dijalog).


2. ukoliko si polje u tabeli stavio kao binary, onda bi ovako nesto trebalo da radi:

TBlobField(MojaTabela.FieldByName('SLIKA')).LoadFromFile(OpenFileDialog.Filename);

Za prikaz onda ne mozes koristiti onaj dbimage objekt, jer on ne razume binary podatak (pisem iz glave, moguce da ima gresaka):

Kod:
  jpg: TJPEGImage;
  tmpStream: TMemoryStream;
begin
  jpg := TJPEGImage.Create();
  tmpStream := TMemoryStream.Create();
  try
    TBlobField(MojaTabela.Fieldbyname('SLIKA')).SaveToStream(tmpStream);
    tmpStream.Position := 0;
    jpg.LoadFromStream(tmpStream);

    if jpg.Size > 0 then
    // prikazujes u TImage objektu ili lepis direktno na 
    // canvas neke svoje komponente
      Image1.Picture.Assign(jpg);

  finally
    jpg.Free();
    tmpStream.Free();
  end;


Alternativa binary je koriscenje OLE polja.


3. Paradox je bio muljav sa tim brisanjem iz .mb-a, ako me secanje ne vara on je to praznio tek kada povuces reindexiranje tabele. Alternativa ti je opet koriscenje ADO paketa umesto BDE-a (izmene su minimalne) i spremanje u neku access bazu.
 
smez je napisao(la):
1. hmmm... ni na kraj pameti mi ne bi palo da pravim instalaciju... no nebitno, opet nece da radi. opet DB trazi u folderu u kojem je bio dok sam pravio instalaciju a ne u folderu koji je napravljen instalacijom. nisam mnogo koristio install shield, ima mnogo opcija, pa ako znas tacno gde trebam da stavim podatke za DB bio bih ti zahvalan.

nemam vremena da se sad zanimam sa tim, uvece cu sam da pokusavam sa tim instalacijama pa se javljam da li sam uspeo. kad ti kazes, verujem da tako moze da se napravi...

Prilikom konfiguracije BDE u Install shield-u mozes da napravis alias koji ce se kreirati tokom instalacije na drugom racunaru . Mozes koristiti sintaksu tipa
<InstallDIR>Tabele - za lokaciju fajlova pa ce tada uvek kreirati fleksibilno u zavisnosti od izbora mesta instalacije. Naravno ako u install shield-u dozvolis da bira mesto instalacije.
 
@silverglider:
1. skroz ne znam da radim na taj nacin. nisam koristio TDatabase vec TTable. preskocicemo to, ako Ivan zna da mi objasni to mi mnogo pomoglo

za jpg cu pokusati kasnije, sad mi je ovo vazno.

@ Ivan:
pokusavao sam i pokusavao... ne znam gde se to podesava da se odmah napravi alias. ako ti nije tesko ukljuci install shield pogledaj gde je to pa mi napisi.
 
smez je napisao(la):
@silverglider:
1. skroz ne znam da radim na taj nacin. nisam koristio TDatabase vec TTable. preskocicemo to, ako Ivan zna da mi objasni to mi mnogo pomoglo

za jpg cu pokusati kasnije, sad mi je ovo vazno.

@ Ivan:
pokusavao sam i pokusavao... ne znam gde se to podesava da se odmah napravi alias. ako ti nije tesko ukljuci install shield pogledaj gde je to pa mi napisi.

Nemam trenutno Instaliran Delphi a ne mogu da restartujem komp zbog e-mazge ali ovo sigurno moze to sam radio jos od verzije 5. Mislim da nije komplikovano, pogledaj malo bolje.

BTW
Koju verziju Delphi-ja koristis?

PS:
Na brzinu sam nasao ovo na net-u

I used InstallShield Express, Borland Limited Edition to create some applications with the BDE.

In the Object/Merge Module select the BDE_ENT.
Right click your selection to configure the BDE.
Look to launch the BDE configuration Utility and you will be prompted for the alias and you need to specify where the data directory. The BDE must be installed on your deployment computer for this to work.
 
Poslednja izmena:
smez je napisao(la):
@silverglider:
1. skroz ne znam da radim na taj nacin. nisam koristio TDatabase vec TTable. preskocicemo to, ako Ivan zna da mi objasni to mi mnogo pomoglo

Koriscenje TDatabase objekta ne iskljucuje TTable, to nije nikakva zamena za njih. Tim objektom se samo resavas bilo kakave potrebe za aliasima i drugim arhaicnim stvarima koje se odavno ne koriste vise. Kod paradoxa baza je sustinski direktorijum i tabele su fajlovi u okviru njega; pomocu TDatabase objekta samo definises path na disku do tvoje baze i to je sve. Stavis objekat na form, popunis tri propertyja i to je sva mudrost u deset sekundi.
A u propertyima TTable objekata ne popunjavas Alias, nego samo DatabaseName i to je sve - nista drugo svoje TTable objekte ne diras. Tako na najelegantniji nacin resavas putanju do svoje baze (kao prosto zadavanje stringa), kako na svojoj masini, tako i na onoj gde se sw sa bazom instalira - i ne moras da razmisljas uopste o aliasima, dsn-ovima i ostalim karakondzulama.
Tim putem imas i drugih prednosti - npr, da ne moras da otvaras svaku tabelu posebno, nego otvoris samo taj database objekat, itd.
 
1. Za rad programa koji koristi Paradox bazu na bilo kom racunaru neophodan je Borland Database Engine (BDE). Jedan nacin za njegovu instalaciju je koriscenje InstallShielda, ali moze i bez toga.
Na instalacionom disku Delphi-ja 7 nalazi se u folderu \Install\Common\Borland Shared\BDE\ fajl bdeinst.cab. U njemu je bdeinst.dll, koji ti treba. Na masini na koju hoces da instaliras BDE ukucaj regsvr32 bdeinst.dll i krenuce instalacija.
Ostaje ti da kopiras svoj program i podesis alias.

2. Probaj da dodas uses JPEG, mozda ce to biti dovoljno. Za OpenPictureDialog svakako jeste, a sto se tice paradoxa, mislim da ne zavisi od njega.

3. Ako nikako drugacije, otvori tabelu u DBD-u, idi na restructure table, chekiraj pack table i save. Preko koda iz Delphi-a, ne znam.
 
Poslednja izmena:
hvala svima na pomoci, nemam nesto vremena da pokusavam sve ovo. za vikend cu imati vremena pa cu se javiti ako slucajno nesto ne uspem.
 
silverglider je napisao(la):
Koriscenje TDatabase objekta ne iskljucuje TTable, to nije nikakva zamena za njih. Tim objektom se samo resavas bilo kakave potrebe za aliasima i drugim arhaicnim stvarima koje se odavno ne koriste vise. Kod paradoxa baza je sustinski direktorijum i tabele su fajlovi u okviru njega; pomocu TDatabase objekta samo definises path na disku do tvoje baze i to je sve. Stavis objekat na form, popunis tri propertyja i to je sva mudrost u deset sekundi.
A u propertyima TTable objekata ne popunjavas Alias, nego samo DatabaseName i to je sve - nista drugo svoje TTable objekte ne diras. Tako na najelegantniji nacin resavas putanju do svoje baze (kao prosto zadavanje stringa), kako na svojoj masini, tako i na onoj gde se sw sa bazom instalira - i ne moras da razmisljas uopste o aliasima, dsn-ovima i ostalim karakondzulama.
Tim putem imas i drugih prednosti - npr, da ne moras da otvaras svaku tabelu posebno, nego otvoris samo taj database objekat, itd.

bravo bravo i bravo! :banana:
ovo sto si ti rekao sinoc sam uspeo da sprovedem u delo. iz algoritma vam je jasno kako sam ovo resio:

procedure TForm1.Button1Click(Sender: TObject);
begin
database1.AliasName:='shugavi_alias';
table1.DatabaseName:=database1.DatabaseName;
if opendialog1.Execute then
begin
table1.TableName:=opendialog1.FileName;
table1.Active:=true;
end;
end;

u programu to izgleda ovako: pritiskom na button otvara se "openDialog" pomocu koga se na hdd-u nalazi databaza i odmah se ucitava ma gde bila ona na hdd-u. NADAM SE da ce biti i na drugim racunarima tako, mada ne vidim prepreke zasto ne bi bilo. danas cu i to da probam...


sto se tice ovog postupka koji su Ivan i dogriz objasnjavali, mislim da ipak komplikovanije, ako ne i nemoguce. bar ja nisam uspeo ali i citiram njihove postove pa razmislite sami:
Look to launch the BDE configuration Utility and you will be prompted for the alias and you need to specify where the data directory. The BDE must be installed on your deployment computer for this to work.
1. Za rad programa koji koristi Paradox bazu na bilo kom racunaru neophodan je Borland Database Engine (BDE). Jedan nacin za njegovu instalaciju je koriscenje InstallShielda, ali moze i bez toga.
mnogo bi bilo da sad uz instalaciju programa na drugom racunaru mora instalirati i nesto dodatno da bi program radilo. bar ja kapiram da mora tako, mozda ipak moze lakse da se obavi.


ehhh sad ostaju jos pitanja pod br 2 i br 3... :D vazno mi je jos da ubacim JPG u ovu bazu, treca stavka moze da se preskoci...
neko reche ali ja ne kapiram ulogu "OLE" polja? pokusam sam nesto na brzinu ali nista nisam uspeo...
silverglider je rekao da ne mogu koristiti DBImage za prikaz JPG-a. meni se cini da je to u pitanju sto mene koci. po mom misljenju slika se snimi u tabelu, jer ne pokazuje nikakve greske, ali nikako nece da se prikaze u DBImage-u. kako to zaobici? obicna Image komponenta ne moze mi pomoci jer je prakticnije da kada se korisnik krece kroz DBGrid da se odmah u tom DBImage-u pojavljuje slika osobe...
 
smez je napisao(la):
u programu to izgleda ovako: pritiskom na button otvara se "openDialog" pomocu koga se na hdd-u nalazi databaza i odmah se ucitava ma gde bila ona na hdd-u. NADAM SE da ce biti i na drugim racunarima tako, mada ne vidim prepreke zasto ne bi bilo. danas cu i to da probam...
pokusao sam i nece da radi na drugim racunarima... :mad: :smash:
prijavljuje da nije instaliran onaj dodatak za BDE. verovatno je to neizbezno... smorilo me sve.
 
smez je napisao(la):
pokusao sam i nece da radi na drugim racunarima... :mad: :smash:
prijavljuje da nije instaliran onaj dodatak za BDE. verovatno je to neizbezno... smorilo me sve.

Naravno da mora, kad koristis BDE. Predji na ADO i dovoljno je samo Tvoj EXE da distibuiras i da pri konekciji na bazu koristis ODBC string.

Sto je tice JPG-a to sto sam ti napisao (a Silver detaljno objasnio) je pravo resenje i opet provereno radi. Ako hoces mogu i ja da iskopam primer veceras jer sa pravio neki programcic koji ubacuje neke skenirane stranice u Paradox.


PS: oko Install Shield-a:
BTW Secam se da je bilo problema u Shieldu za Verziju 6 i nesto nije hteo sam da pravi alias-e pri instalaciji ali u 5 i 7 Nije bilo problema.

Jos nesto nemoj koristiti ADO u Delphi verziji 5 Jer postoji gomila bagova vezano za ADO koje je i sam Borland priznao (a ja licno osetio na svojoj kozi :) )
 
Poslednja izmena:
smez je napisao(la):
mnogo bi bilo da sad uz instalaciju programa na drugom racunaru mora instalirati i nesto dodatno da bi program radilo. bar ja kapiram da mora tako, mozda ipak moze lakse da se obavi.

Ne treba nista dodatno instalirati. Ako kopiras svoj exe na drugi racunar, uz to treba da iskopiras na ciljni racunar i odgovarajuce bpl fajlove (vclbdeXXX.bpl, vcldbXXX.bpl, itd) iz svog c:\windows\system32 dira u njegov. Installshield radi to umesto tebe, tj. u projekt-fajlu u IS-u ti samo selektujes da koristis BDE, a on onda odabere fajlove koje treba i strpa ih u taj *.msi ili setup.data fajl. Razlika je samo u tome sto on zna koji fajlovi treba da idu, a bez njega to treba ti sam da ubadas.


BTW, prica sa ADO je malo laksa, s tim da na potpuno "praznom", sveze instaliranom racunaru nece ni program radjen sa ADO da radi, ukoliko se pre toga ne instalira MDAC (koji je par mega i moze da se skine sa MS sajta). U suprotnom, svaki komp na kojem je instaliran recimo office ce sa ADO vezama raditi kako treba bez dodatnih zahteva. ADO radi ok i pod D5, treba samo instalirati patch koji je borland tada bio izbacio. Imam neku matoru aplikaciju pisanu u D5 sa ADO-om i radi i dan danas vezujuci se na MS SQL Server 2005.


smez je napisao(la):
ehhh sad ostaju jos pitanja pod br 2 i br 3... :D vazno mi je jos da ubacim JPG u ovu bazu, treca stavka moze da se preskoci...
neko reche ali ja ne kapiram ulogu "OLE" polja? pokusam sam nesto na brzinu ali nista nisam uspeo...
silverglider je rekao da ne mogu koristiti DBImage za prikaz JPG-a. meni se cini da je to u pitanju sto mene koci. po mom misljenju slika se snimi u tabelu, jer ne pokazuje nikakve greske, ali nikako nece da se prikaze u DBImage-u. kako to zaobici? obicna Image komponenta ne moze mi pomoci jer je prakticnije da kada se korisnik krece kroz DBGrid da se odmah u tom DBImage-u pojavljuje slika osobe...

OLE polja ti ne trebaju ukoliko koristis binary polja u tabeli, OLE je samo alternativa binary polju za snimanje binarnih podataka. Razlika je samo u interpretaciji: za binary polje je ubacen fajl samo niz bajtova i tvoja je stvar sta ces sa time raditi, kako ces ga prikazati, itd. OLE polje to tretira kao dokumente odredjenih aplikacija. Recimo da snimas pdf dokument u tabelu pod OLE poljem - za prikaz ces najverovatnije koristiti Acrobat Reader ActiveX objekt ili ga otvoriti u samom Readeru, kao externoj OLE registrovanoj aplikaciji (pojednostavljeno receno).


Za JPG sam ti vec vise nego konkretno dao i odgovor i kod - dbimage ne razume jpeg, pravljen je za bmp. Imas gore kod za ucitavanje jpega iz baze i prikaz u okviru image objekta; cela mudrost koja tebe ceka jeste da ga stavis u AfterScroll event tabele koja sadrzi slike i da promenis nazive polja. To je manje od minut posla.
Nakon toga, kada se korisnik krece kroz tabelu, odgovarajuca slika ce biti ucitana i prikazana u okviru imidza - bez obzira u kojoj vizuelnoj komponenti korisnik bio, da li je to dbgrid, navigator ili nesto trece - sve one pomeraju kursor u tabeli i tabela ce cimnuti proceduru za prikaz slike.
Sta mislis kako su oni uradili dbimage za bmp? Pa na potpuno isti nacin, bas kao i dbedit i ostale komponente. Nemoj da se ogranicavas time sta vec gotove komponente mogu da urade, nego zagrebi malo i ispod haube.
 
Poslednja izmena:
Nazad
Vrh Dno