AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Interbase SQL-Dialect 1/3 - Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Interbase SQL-Dialect 1/3 - Problem

Ein Thema von wendelin · begonnen am 18. Dez 2013 · letzter Beitrag vom 18. Dez 2013
Antwort Antwort
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 11:07
Wenn du das etwas umstrukturierst, dann wird das auch übersichtlicher und besser dokumentiert:

In TForm3 folgendes rein:
Delphi-Quellcode:
  // Wir wollen etwas in die StatusBar schreiben
  procedure TForm3.SetStatus( const AText : string );
    begin
      StatusBar.SimpleText := AText;
      StatusBar.Refresh;
    end;

  procedure TForm3.SpeedButton9Click( Sender : TObject );
    begin
      EditDBPath.Text := g_DBPfad + '\My_IB_DB.gdb';
      // Das DataModule kümmert sich um die Anlage der Datenbank
      // Um StatusMeldungen an die Form zu liefern, nehmen wir die Methode SetStatus als Callback ;o)
      DataModule2.CreateDataBase( EditDBPath.Text, EditUserName.Text, EditPassword.Text, SetStatus );
    end;
In TDataModule2 werden die Methoden CreateDatabase und CreateTables angelegt
Delphi-Quellcode:
  // Eine Callback-Methode für Status-Meldungen
  type
    TStatusCallback = procedure( const AStatus : string ) of object;

  procedure TDataModule2.CreateTables( StatusCallback : TStatusCallback );
    begin
      // whatever
    end;

  procedure TDataModule2.CreateDataBase( const DBPath, Username, Password : string; StatusCallback : TStatusCallback );
    const
      cCreateTxt = ' %d. Versuch: Datenbank wird erstellt...';
      cReadyTxt = 'Datenbank wurde erstellt!';
      cFailureText = 'Datenbank konnte nicht erstellt werden!';
    begin
      if FileExists( DBPath )
      then
        // Keine Meldung ausgeben, sondern eine Exception
        // Dadurch kommt die Meldung eh ;o)
        raise Exception.CreateFmt( 'Die Datenbank "%s" existiert schon', DBPath );

      Screen.Cursor := crHourGlass;
      try
        IBD.LoginPrompt := FALSE;
        IBD.Connected := FALSE;
        IBD.Params.Clear;

        // StatusMeldung (Callback-Methode aufrufen)
        StatusCallback( Format( cCreateTxt, [1] ) );

        try

          IBD.DatabaseName := DBPath;
          IBD.Params.Add( Format( 'USER "%s"', [Username] ) );
          IBD.Params.Add( Format( 'PASSWORD "%s"', [Password] ) );
          IBD.SQLDialect := 1;
          IBD.Params.Add( 'PAGE_SIZE 4096' );
          IBD.Params.Add( 'DEFAULT CHARACTER SET ISO8859_1' );
          IBD.CreateDataBase;

          // StatusMeldung (Callback-Methode aufrufen)
          StatusCallback( cReadyTxt );

          // Tables_anlegen; // Tabellen werden angelegt
          CreateTables( StatusCallback );

        except
          on E : Exception do
            begin
              if FileExists( DBPath )
              then
                DeleteFile( DBPath );

              // StatusMeldung (Callback-Methode aufrufen)
              StatusCallback( cFailureText );

              raise;
            end;
        end;

      finally
        Screen.Cursor := crDefault;
      end;
    end;
Und damit ist in TForm3.SpeedButton9Click auf einen Blick klar, was da passiert -> Es wird eine Datenbank angelegt (Documentation by Code). Vorher musste man sich erst durch den Quellcode wühlen, um das festzustellen.
Lieber Sir Rufo, der SourceCode stammt fast 1:1 von Andreas Kosch (Datenbankentwicklung mit Interbase - S.338-339). Bisher hatte ich an dem Buch wenig auszusetzten.
Dennoch vielen Dank für Deine Anregungen.
Meine eigentliche Frage ist aber immer noch nicht beantwortet worden !
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 11:36
@wendelin

Du hast auch immer noch nicht das Skript gezeigt, was da ausgeführt werden soll.
Wie sollen wir das also beantworten können?

Vorbeikommen und auf deinen Bildschirm schauen?

Hoffentlich hast du genug zu trinken da
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 12:21
@wendelin

Du hast auch immer noch nicht das Skript gezeigt, was da ausgeführt werden soll.
Wie sollen wir das also beantworten können?

Vorbeikommen und auf deinen Bildschirm schauen?

Hoffentlich hast du genug zu trinken da
Welches Script? Es gibt KEIN Script, da ich die IBDB ausschließlich wie gezeigt anlege.Ebenso wie
die Tabellen. Wie schon erwähnt,funktioniert ja alles auch (NUR mit Dialect 1) zu meiner
vollsten Zufriedenheit.
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 12:57
@wendelin

Du hast auch immer noch nicht das Skript gezeigt, was da ausgeführt werden soll.
Wie sollen wir das also beantworten können?

Vorbeikommen und auf deinen Bildschirm schauen?

Hoffentlich hast du genug zu trinken da
Welches Script? Es gibt KEIN Script, da ich die IBDB ausschließlich wie gezeigt anlege.Ebenso wie
die Tabellen. Wie schon erwähnt,funktioniert ja alles auch (NUR mit Dialect 1) zu meiner
vollsten Zufriedenheit.
Ok, und die Tips bzgl. statt
Delphi-Quellcode:
IBD.Params.Add( Format( 'USER "%s"', [Username] ) );
IBD.Params.Add( Format( 'PASSWORD "%s"', [Password] ) );
mal das zu verwenden
Delphi-Quellcode:
IBD.Params.Add( Format( 'USER ''%s''', [Username] ) );
IBD.Params.Add( Format( 'PASSWORD ''%s''', [Password] ) );
hast du schon versucht?

Dann sollten die Parameter intern so aussehen
Code:
USER 'SYSDBA'
PASSWORD '<dein_passwort>'
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1
was mit dem SQL-Dialekt 1 und 3 funktioniert.

Das was du z.Zt. produzierst
Code:
USER "SYSDBA"
PASSWORD "<dein_passwort>"
PAGE_SIZE 4096
DEFAULT CHARACTER SET ISO8859_1
geht nur mit dem SQL-Dialekt 1

(wurde hier mehrfach erwähnt)
weil im Dialekt 1 die Nutzung von " und ' gleichwertig ist und im Dialekt 3 " für Objektnamen und ' für Strings benutzt wird. Der Username Sysdba ist ein String und muß daher mit ' abgegrenzt werden. Das wäre aber weiterhin auch zum Dialekt 1 kompatibel
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Dez 2013 um 13:03 Uhr)
  Mit Zitat antworten Zitat
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 18:20
Hallo Sir Rufo,

vielen Dank für Deinen Tip, es war ein VOLLTREFFER. Funktioniert sowohl im SQL-Dial. 1 als auch 3!
Ich habe zwar so etwas vermutet, siehe meine Kommentare im Quelltext, bin aber nicht auf den
richtigen Trichter gekommen.
Wolfgang
  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 23:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz