AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Probleme mit Konvertierung String->PChar (Pointer)->String
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Konvertierung String->PChar (Pointer)->String

Ein Thema von idontwantaname · begonnen am 13. Jun 2005 · letzter Beitrag vom 19. Jun 2005
Antwort Antwort
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme mit Konvertierung String->PChar (Pointer)->St

  Alt 13. Jun 2005, 15:04
Hallo Leute !!

Ich hab ein großes Problem, hoffentlich könnt ihr mir helfen!
Ich programmiere gerade eine kleine Datenbank . Jedenfalls stoße ich auf Probleme mit Strings bzw. der Speicherung von Strings. Da die Datentypen der Tabellen variieren muss ich leider mit Pointer arbeiten, und da gibt es Probleme
Vor allem bei der Speicherung von Strings. Komischer Weise funktioniert alles, wenn ich die Arbeitsschritte in einer einfachen Funktion nachbilde. Ich suche schon zwei Tage nach dem verdammten Fehler, jedoch finde ich keine Lösung. Und deshalb wende ich mich nun an euch!

zur Struktur der Datenbank:
Am Anfang steht ein Record (FDataBase), welches einen String (FName) und eine Liste (FTables) enthält. Die Pointer der Liste sind Zeiger auf Tabellen-Records. Diese beinhalten einen String (FName), ein dynamisches Array (FFields) von Pointern und eine Liste (FData). Die Pointer des Arrays zeigen auf Felder-Records, diese speichern Namen und Typen (Integer -> Konstanten!). Die Liste (FData) enthält Pointer auf dynamische Arrays von Pointern, welche wiederum auf Integer, Boolean oder Stringvariabeln zeigen, je nach Datentyp.

Folgendes manchmal funktioniert nicht:

Hinweis: Die Funtion SelectFromTable ist noch nicht fertiggestellt, die letzten beiden Parameter werden noch nicht beachtet, die Funktion lädt die ganze Tabelle in das Ergebnis
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  theDB: TmyDB;
begin
  theDB := TmyDB.Create( 'Datenbank2' );

  theDB.CreateTable( 'Tabelle' , 'id = int; text = str' );
  theDB.InsertIntoTable( 'Tabelle' , 'id = 100; text = Hallo_Markus!' );
  theDB.SelectFromTable( 'Tabelle' , '' , '' );
  ShowMessage( theDB.Result.ReadString( 0 , 'text' ) );

  theDB.Free;
end;
Die angezeigte Nachrichtist manchmal korrekt, manchmal fehlt das Rufzeichen, manchmal befindet sich eine € am Schluss oder ein Rechteck, oder manchmal kommt ein kompletter Blödsinn heraus, wie z.B. : "a<*As", ihr könnt es ja selber testen, der rechte Button des Programmes, welches ich angehängt habe. Es dauert jedoch manchmal etwas länger bis eine fehlerhafte Anzeige auftritt.

Und folgendes funktioniert gar nicht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  myDB: TmyDB;
begin
  myDB := TmyDB.Create( 'Datenbank1' );
  myDB.CreateTable( 'Tabelle1' , 'id = int; meintext = str ; schreiben = bool' );
  myDB.InsertIntoTable( 'Tabelle1' , 'id = 1; meintext = hallodu1!; schreiben = true' );
  myDB.InsertIntoTable( 'Tabelle1' , 'id = 2; meintext = hallodu2!; schreiben = false' );
  myDB.InsertIntoTable( 'Tabelle1' , 'id = 3; meintext = hallodu3!; schreiben = true' );

  myDB.SelectFromTable( 'Tabelle1' , '' , '' );

  // Ausgabe von verschiedenen Werten
  ShowMessage( '1 = ' + IntToStr( myDB.Result.ReadInteger( 0 , 'id' ) ) );
  ShowMessage( 'hallodu3 = ' + myDB.Result.ReadString( 2 , 'meintext' ) );

  if( myDB.Result.ReadBoolean( 2 , 'schreiben' ) ) then
    ShowMessage( 'Bool geht' ) else ShowMessage( 'bool geht nicht :(' );
  myDB.Free;
end;
id wird noch richtig angezeigt, der String und Boolean nicht! Leider finde ich das Problem nicht
Angehängte Dateien
Dateityp: zip mydb_153.zip (204,7 KB, 12x aufgerufen)
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Probleme mit Konvertierung String->PChar (Pointer)-&a

  Alt 14. Jun 2005, 15:47
Bitte nicht alle auf einmal

.... na gut, ich muss zugeben, dass ich nicht viele Antworten erwartet habe
aber wäre trotzdem schön, wenn mir jemand helfen könnte, denn ich finde den Fehler immernoch nicht
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Probleme mit Konvertierung String->PChar (Pointer)-&a

  Alt 15. Jun 2005, 00:22
Moin!
  • Du legst in deiner Datenbank Zeiger auf lokale Variablen ab. Problem dabei ist grundlegend: beim verlassen der Procedure sind die Variaben nicht mehr gültig und der Speicherbereich wird für was anderes genutzt. Das siehst du ja ganz gut an deinem Problem.
  • Dein Free gibt die angelegten Speicherresourcen nicht mal ansatzweise frei - vernachlässige dies nicht sondern entwickle das immer gleich mit!
  • Abhilfe zu deinem Problem: explizit Speicher für den PChar anfordern (wie du es mit New() für die Strukturzeiger machst - dort würde es auch nicht klappen einen Zeiger auf einen lokal definierten Record einzutragen) und diese dann zu nutzen.
  • Beachte bei dem Weg aber, das du den Speicher der mit StrAlloc() angelegt wurde wieder freigegeben werden muss!

Dein 2. Weg klappte meistens, weil du da zwischen anlegen und auslegen nicht viel machst und daher die Chance höher ist, das der Speicher noch nicht wieder neu genutzt wurde.

MfG
Muetze1
Angehängte Dateien
Dateityp: zip mydb_new_191.zip (3,9 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Probleme mit Konvertierung String->PChar (Pointer)-&a

  Alt 19. Jun 2005, 19:13
Moin!

Und? Was ist nun? Erst rumschreien weil es sich keiner anschaut, dann macht man das mal und nun meldet sich keiner mehr...

Wenigstens eine kleine Rückmeldung wäre ja mal nett bzw. eine Nachricht ob es denn nun funktioniert....

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:06 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