AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie einen array of Integer speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie einen array of Integer speichern?

Ein Thema von Benedikt1983 · begonnen am 24. Apr 2006 · letzter Beitrag vom 25. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benedikt1983

Registriert seit: 12. Dez 2003
37 Beiträge
 
#1

Wie einen array of Integer speichern?

  Alt 24. Apr 2006, 17:47
Datenbank: MS Access • Version: 2003 • Zugriff über: MS ADO/dbGo
Hallo zusammen!

Hat jemand eine Idee, wie man am besten einen (dynamischen) array of Integer in einer Datenbank speichert? Brauch ich ein BLOB oder geht's auch ander?

Vielen Dank!
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#2

Re: Wie einen array of Integer speichern?

  Alt 24. Apr 2006, 17:59
Hi.

Kenne mich mit Datenbanken außer MySQL jetzt nicht so gut aus, aber warum machst du das Array nicht einfach zu nem einzigen String, getrennt mit Seperators.
Also auf dem Array
Delphi-Quellcode:
zahlen[0] := 1;
zahlen[1] := 5;
zahlen[2] := 9;
zahlen[3] := 32;
wird beispielsweise
Code:
1;5;9;32
Kennst vielleicht die implode/explode Funktion in PHP.
Implode macht aus nem Array so eine Kette, explode splitet sie wieder in ein Array.
Implode könntest du dir wohl einfach selber machen, explode hab ich mal nachgeschaut und diesen Code gefunden:
Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0):
  TStringDynArray;
var
  SepLen : Integer;
  F, P : PChar;
  ALen, Index : Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then
    Exit;
  if Separator = 'then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := StrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then
      P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then
      Inc(P, SepLen);
  end;
  if Index < ALen then
    SetLength(Result, Index); // wirkliche Länge festlegen
end;
Hier gegoogelt

So würde ichs machen
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Wie einen array of Integer speichern?

  Alt 24. Apr 2006, 18:01
Hier ist noch Explode und Implode
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie einen array of Integer speichern?

  Alt 24. Apr 2006, 18:09
und wenn du es als binärdaten speicherst?

V = Array of Integer

Size = Length(V) * SizeOf(Integer)
Data = Pointer(V)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benedikt1983

Registriert seit: 12. Dez 2003
37 Beiträge
 
#5

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 11:10
Ok, vielen Dank, das mit dem String und implode/explode hatte ich mit schon gedacht und werde auch nehmen, die Pointervariante verstehe ich leider nicht genau... Trotzdem vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 11:28
wenn du die Integers aber als String speicherst, verbrauchst du in der Regel mehr platz (außer du hast kleine Zahlen).
Denn:
50000,66999
ergibt 11 Byte
das ganze als Integer = 2 * SizeOf(Integer) = 8 Byte
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#7

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 14:43
V ist einfach mal ein Array of Integer. (irgendeinen Namen mußte ich ja nehmen)
Außerdem kenn ich mich mit Datenbanken nicht auß, aber viele besitzen Möglichkeiten um Binärdaten zu speichern ... also brauchst du nur x Bytes {die Anzahl errechnet und in "Size" gespeichert} von der Position y {in diesem Fall Pointer(V) } in deer Datenbank abzuspeichern

Delphi-Quellcode:
//speichern
SaveToDB('meinArray', Pointer(V), Length(V) * SizeOf(Integer));

//laden
SetLength(V, GetDataSize('meinArray') div SizeOf(Integer));
LoadFromDB('meinArray', Pointer(V), Length(V) div SizeOf(Integer));
Keine Ahnung wie das bei dir heißt, aber irgendwas, wo man die Daten speichern/auslesen kann wirds schon geben ._.
Delphi-Quellcode:
//Procedure SaveToDB(Name: String; P: Pointer; Size: Integer);
//Function GetDataSize(Name: String): Integer;
//Procedure LoadFromDB(Name: String; P: Pointer; Size: Integer);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 15:45
Mit Pointer(V) wirst du bei einem Dynamischen Array keinen Erfolg haben, da an der Adresse V nur ein weiterer Zeiger auf die steht. Hier musst du dir die Adresse des ersten Elemtentes zurückgeben:

Delphi-Quellcode:
//speichern
SaveToDB('meinArray', Addr(V[0]), Length(V) * SizeOf(Integer));

//laden
SetLength(V, GetDataSize('meinArray') div SizeOf(Integer));
LoadFromDB('meinArray', Addr(V[0]), Length(V) * SizeOf(Integer));
P.S: beim Laden hast / SizeOf(Integer) geschrieben
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 18:33
Zitat von SirThornberry:
wenn du die Integers aber als String speicherst, verbrauchst du in der Regel mehr platz (außer du hast kleine Zahlen).
Denn:
50000,66999
ergibt 11 Byte
das ganze als Integer = 2 * SizeOf(Integer) = 8 Byte

Da hast Du recht, aber... die Ausgangsfrage bleibt doch? Wie würdest Du das in einer Datenbank speichern?

Zumal ja Anzahl der Integers nach oben offen ist.

[edit]
Hm wohl so wie himitsu schrieb
[/edit]
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#10

Re: Wie einen array of Integer speichern?

  Alt 25. Apr 2006, 18:46
Zitat von jim_raynor:
Mit Pointer(V) wirst du bei einem Dynamischen Array keinen Erfolg haben, da an der Adresse V nur ein weiterer Zeiger auf die steht.
Addr(V[0]) oder @V[0] oder Pointer(V) sind im Grunde das "Gleiche",
denn in einem dynamschen Array ist zwar die Variable ein Zeiger auf die Datenstruktur, allerdings zeigt der nicht auf den Anfang der Datenstruktur, sondern auf das erste Element im Array, außerdem ist dieser Wert gleich NIL, wenn 0 das Array eine Länge von 0 hat.
Also bei Length(V)=0 ist Pointer(V) = nil, wärend aber V[0], @V[0] und Addr(V[0]) eine nette Zugriffsverletzung ergibt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz