08. juli 2011 - 19:07 Der er 13 kommentarer og
1 løsning

Gemme billeder i en paradox database.

Jeg har lavet et lille kundekartotek, hvor jeg også gerne vil have gemt billedet af kunden.
Ved at søge alle mulige steder (Google), har jeg fundet ud af at billedet gemmes i min paradox tabel på følgende måde.

  with Global.Kunde.DataSet do
  begin
    ...
    ...
    ...
    FieldByName('Billede').Assign(K.Billede);
    Post;
    ...
  end;

Ved at søge alle mulige steder (Google), har jeg endnu ikke været i stand til at finde hjælp om hvordan jeg får fat i billedet igen.
Alle andre data henter jeg på følgende måde:

  with Global.Kunde.DataSet do
  begin
    ...
    ...
    ...
    HentKunde.Billede := FieldByName('Billede')???
    ...
  end;

Det duer bare ikke ved et billede.

Er der nogen her der ved hvordan?
Avatar billede vallemanden Nybegynder
08. juli 2011 - 19:27 #1
og DBImage er ikke en mulighed?
Avatar billede vallemanden Nybegynder
08. juli 2011 - 19:31 #2
gem billed

with table1 do
begin
  Close;
  SQL.Clear;
  VALUES (:paramthom,:parambillede, :paramext)');
  SQL.Add('INSERT INTO item (picindb,ext) VALUES (:parambillede, :paramext)');
Params.ParamByName('parambillede').Loadfromfile(edit13.text, ftBlob);
Params.ParamByName('paramext').Value := ExtractFileExt(Edit11.Text);
        ExecSQL;
        Open;
      end;
08. juli 2011 - 19:46 #3
Hej Vallemanden

Hvis jeg skriver:
  HentKunde.Billede := FieldByName('Billede').AsDBImage;

Får jeg følgende fejlbesked:
  Undeclared Identifier: 'AsDBImage'

Det der forvirrer mig mest er at der kun skal én linie til at gemme.
  FieldByName('Billede').Assign(K.Billede);

Men alle de steder jeg har set er der funktioner, til at hente, med både 15 og 20 linier kode, som jeg ikke kan gennemskue.

Og jeg er ikke god til SQL.
Det er et sted mellem 15 og 20 år siden jeg lærte lidt om det, og jeg har ikke brugt det siden.
Avatar billede martinlind Nybegynder
08. juli 2011 - 21:57 #4
Assign er en funktion der kopier indholdet og du kan bruge det på samme måde når du skal ha det ud igen

kbillede.assign(fieldbyname('').AsBitmap);
Avatar billede vallemanden Nybegynder
08. juli 2011 - 22:36 #5
TDBImage er en komponent :)
08. juli 2011 - 23:07 #6
Hej Martin Lind

Jeg håber vi nærmer os.
I første forsøg læste jeg ikke dit forslag ordentligt.
Jeg glemte .AsBitmap
HentKunde.Billede.Assign(FieldByName('Billede'));
Linien compilerede fint, men programmet genererede en 'EAccessViolation'

Nå ja, du skrev jo noget mere.
så jeg prøvede linien:
HentKunde.Billede.Assign(FieldByName('Billede').AsBitmap);
Men så kunne den ikke compilere, jeg fik fejlen 'Undeclared Identifier: AsBitmap'.
Avatar billede vallemanden Nybegynder
09. juli 2011 - 10:05 #7
Jeg forstår ikke helt hvorfor du ikke bruger komponenten TDBImage?
Den ligger under "data controls"
09. juli 2011 - 15:13 #8
HEJ,

Vidste du at PARADOX Databaser er forældede ?

Hvis du går ind på

www.componentace.com/

kan du downloade en database-engine (DBE) som er UAFHÆNGIG af om du har de nødvendige DLL'ere i WINDOWS-system biblioteket (den er en selvstændig komponent). Endvidere er der masser af eksempler på anvendelsen af denne base (og du kan NÆSTEN gøre alt med den).

Det eneste jeg har at udsætte på den er at bitmaps (billeder etc) skal gemmes (og hentes) på en lidt speciel måde (der er masser af eksempler på det i DEMO'erne.

Der er TABLES (som jeg vil foreslå du starter med) OG SQL ...

OG MASSER af eksempler....

Held og lykke


Kristian
09. juli 2011 - 17:53 #9
Hej Snestrup2000

Suk! Ja jeg ved godt at paradox er gammel, men det program jeg har kørende bruge paradoxtabeller og har gjort det i snart 10 år.
Det fungerer og opfylder de krav jeg har.
Databasen består af 24 tabeller og er ikke umiddelbar sådan lige til at konvertere til et andet system.
Og inden du begynder at komme med fif til at konvertere, kan du godt glemme det, det er ikke det der er problemet.

------------------------------

Hej Vallemanden
Hvis jeg lægger en TDBImage, hvordan skal de to funktioner så se ud?


function TGlobal.GemKunde(K: TKundeData): LongInt;
begin
  with Global.Kunde.DataSet do
  begin
    Refresh;
    if K.Index = 0 then
      Append
    else
    begin
      Global.TKunde.IndexName := '';
      Global.TKunde.FindNearest([IntToStr(K.Index)]);
      Edit;
    end;
    FieldByName('Kunde'    ).AsString  := K.Kunde;
    FieldByName('Navn'      ).AsString  := k.Navn;
    FieldByName('Adresse'  ).AsString  := K.Adresse;
    FieldByName('PostNrBy'  ).AsString  := K.PostNrBy;
    FieldByName('FaktAdr'  ).AsInteger  := K.FaktAdr;
    FieldByName('Telefon'  ).AsString  := K.Telefon;
    FieldByName('Kontakt'  ).AsString  := K.Kontakt;
    FieldByName('Indtaler'  ).AsString  := K.Indtaler;
    FieldByName('Bemærk'    ).AsString  := K.Remark;
    FieldByName('Kending'  ).AsString  := K.Kending;
    FieldByName('JuleSalg'  ).AsString  := K.JuleSalg;
    FieldByName('Konto'    ).AsString  := K.Konto;
    FieldByName('Email'    ).AsString  := K.Email;
    FieldByName('Aftale'    ).AsDateTime := K.Aftale;
    FieldByName('Tid'      ).AsDateTime := K.Tid;
    FieldByName('Bruger'    ).AsInteger  := K.Bruger;
    FieldByName('Fødselsdag').AsDateTime := K.Fodselsdag;
    FieldByName('Aktiv'    ).AsBoolean  := K.Aktiv;
    FieldByName('Billede'  ).Assign(K.Billede);
    Post;
    GemKunde := FieldByName('Index').AsInteger;
  end;
end;

function TGlobal.HentKunde(I: LongInt): TKundeData;
begin
  with Global.Kunde.DataSet do
  begin
    Refresh;
    Global.TKunde.IndexName := '';
    Global.TKunde.FindNearest([IntToStr(I)]);
    HentKunde.Index      := FieldByName('Index'    ).AsInteger;
    HentKunde.Kunde      := FieldByName('Kunde'    ).AsString;
    HentKunde.Navn      := FieldByName('Navn'      ).AsString;
    HentKunde.Adresse    := FieldByName('Adresse'  ).AsString;
    HentKunde.PostNrBy  := FieldByName('PostNrBy'  ).AsString;
    HentKunde.FaktAdr    := FieldByName('FaktAdr'  ).AsInteger;
    HentKunde.Telefon    := FieldByName('Telefon'  ).AsString;
    HentKunde.Kontakt    := FieldByName('Kontakt'  ).AsString;
    HentKunde.Indtaler  := FieldByName('Indtaler'  ).AsString;
    HentKunde.Remark    := FieldByName('Bemærk'    ).AsString;
    HentKunde.Kending    := FieldByName('Kending'  ).AsString;
    HentKunde.JuleSalg  := FieldByName('JuleSalg'  ).AsString;
    HentKunde.Konto      := FieldByName('Konto'    ).AsString;
    HentKunde.Email      := FieldByName('Email'    ).AsString;
    HentKunde.Aftale    := FieldByName('Aftale'    ).AsDateTime;
    HentKunde.Tid        := FieldByName('Tid'      ).AsDateTime;
    HentKunde.Bruger    := FieldByName('Bruger'    ).AsInteger;
    HentKunde.Fodselsdag := FieldByName('Fødselsdag').AsDateTime;
    HentKunde.Aktiv      := FieldByName('Aktiv'    ).AsBoolean;
    try
      HentKunde.Billede.Assign(FieldByName('Billede'));
      // Det er denne linie der driller.
    except

    end;
  end;
end;
10. juli 2011 - 02:06 #10
HEJ AKA,

Jeg kunne ikke drømme om at prøve at konvertere dig (eller nogen anden) til noget som helst, det er en personlig sag hvad du (eller en hvilken som helst anden) vælger, som jeg fuldt ud respekterer.

Årsagen til at jeg skrev om ABS-basen var at det kunne være et MULIGT alternativ.

Men nu har du linket og bruge det som du vil.

(Jeg kan nok ikke hjælpe dig så meget (som jeg egentlig nok gerne ville) da det er år siden jeg "paradoks-alt" nok lagde den DBE i mølposen. Jeg husker ikke (og gider egentlig heller ikke) refreshe syntakser'ne for PARADOX.)

Men det forhindrer mig ikke i at ønske dig held og lykke med dit projekt.

Kristian
10. juli 2011 - 02:10 #11
HEJ AKA,,

PS: 

Der er et eksempel i ABS-demoerne på det du søger.

Men valget er dit (suverent) ...

Kristian
Avatar billede vallemanden Nybegynder
10. juli 2011 - 12:06 #12
du skal 'binde' en Tdatasource (ligger under dataacces) på den tabel du bruger til dine kunder, derefter binder du tdbImage på den datasource og felt i db ('Billede') og så slet de linier hvor du henter og gemmer billed, da TDBImage selv klare det
10. juli 2011 - 12:22 #13
Hej Vallemanden

Jeg havde på fornemmelsen, at det var sådan noget der var på vej.
Ideen er sikkert god nok, jeg kan blot ikke lide den.

Jeg forstår TDBImage komponenten således:
Lige så snart man har enten loadet eller slettet billedet så er databasen opdateret.
Jeg har arbejdet med forskellige databasesystemer hvor databasen er ajourført i samme øjeblik man har skrevet i feltet, F.eks. Concorde.

Jeg personlig har det bedst med at man aktivt bekræfter de ændringer man har lavet.
Det betyder også at hvis man ved en fejl taster noget i et forkert felt, så trykker jeg blot på ESC, og så er der ingen ændringer foretaget i databasen.
Det er derfor jeg har den lange kode der læser og skriver i databasen.
24. juli 2011 - 23:48 #14
Jammen det gik jo fint med at gemme billedet, tror jeg nok.
Da jeg ikke kan hente den fra databasen igen, ved jeg jo ikke om den er gemt.
Nu har administrator bedt mig lukke denne tråd.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester