[Code] [Delphi] Frage zu Datenbank

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Prrovoss, 27. März 2010 .

  1. 27. März 2010
    [Delphi] Frage zu Datenbank

    1.)
    so, ich hab ma ne frage zu dem datenfeldtyp autoincrement. es is ja schon sehr hilfreich dass durch diesen typ zb. id's automatisch erstellt werden. wie aber kann ich einstellen dass schonmal verwendete zahlen wieder verwendet werden können?

    bsp.
    ich hab 4 datensätze:
    name id
    a 1
    b 2
    c 3
    d 4

    wenn ich jetzt den zweiten datensatz lösche dann verschwindet natürlich auch die id nr 2.
    füge ich einen neuen datensatz ein hat er die id 5 und nich 2. das macht sinn wenn keine id ein zweites mal vergeben werden soll. in meinem fall wäre das aber ganz gut wenn diese lücken auch ausgefüllt werden würden.


    2.)
    könntet ihr mir ein paar ganz gut tuts zu dem thema posten? zb. wie man "manuell" zb. einen neuen datensatz anlegt usw. mit der navbar wird das ja alles schon vorgegeben aber ich bräuchte das ein bisschen individueller.
     
  2. 27. März 2010
    AW: [Delphi] Frage zu Datenbank

    keiner?

    mir geht es inzwischen mehr um die zweite frage^^ wie kann ich die einzelnen funktionen der NavBar "nachbauen"? ich verstehe nich ganz wie ich einen neuen datensatz anlege.

    in einem tut habe ich dazu folgendes gefunden:

    Code:
     table1.first; //Springt zum ersten Datensatz
     table1.prior; //zum vorigen Datensatz
     table1.next; //zum nächsten Datensatz
     table1.last; //zum letzten Datensatz
     table1.edit; //wechselt in den Editiermodus
     table1.post; //speichert Änderungen am aktuellen Datensatz
     table1.refresh; //lädt die Daten erneut
    
    wie aber lege ich damit einen neuen datensatz an? wenn ich in den editiermodus wechsle und dann speichere wird doch ein datensatz geändert oder nicht?



    und wo wir grade beim thema sind^^ was ist der unterschied zwischen zb. der dblistbox und dblookuplistbox
     
  3. 28. März 2010
    AW: [Delphi] Frage zu Datenbank

    1. Kein Ahnunung ob das geht mit dem auto_increment, müsste dir jemand sagen der sich mit Datenbanken auskennt; ich nehme mal an es ist so im "Standart" festgellegt und ohne umwäge kriegt man das nicht hin.

    2. Mit tTable & tQuery Arbeiten - Entwickler-Ecke Da fineste alle möglichen Zugriffsarten um die Datenbank(-sätze) zu bearbeiten.

    3. http://wwwswt.informatik.uni-rostock.de/deutsch/Mitarbeiter/michael/lehre/Delphi_1999/Vortrag07/delphidb1.htm: Da wird unteranderem erklärt was der unterschied zwischen dblistbox und dblookuplistbox ist.

    Mfg Rushh0ur
     
  4. 28. März 2010
    AW: [Delphi] Frage zu Datenbank

    ok thx. die tuts sehen schonma sehr vielversprechend aus!

    wegen dem autoincrement muss ich mal weitersuchen ich bin der meinung dass wir sowas vor 3 jahren mal in informatik gemacht haben. ich kann mich aber beim besten willen nichmehr erinnern wie genau^^
     
  5. 28. März 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: [Delphi] Frage zu Datenbank

    so ok neue frage^^
    Bild

    der fehler kommt wenn ich das projekt sammt .db datei auf anderen rechnern starte. hab schon recherchiert und herausgefunden dass auf dem rechner bde installiert sein muss und man das programm iwi mit nem installshield express erstellen soll aber ich find dazu nix. also wie kann ich den fehler beheben? bzw kann ich auch auf nen anderen datenbanktyp umsteigen der die bde nicht vorraussetzt?
     
  6. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    Wie du die Borland Database Engine (BDE) auf einen anderen Rechner installierst wird hier erklärt:
    Installing the BDE (manually or using an install program)

    Mfg Rushh0ur
     
  7. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    genauso funktionierts super!
    nur hab ich das ganze jetzt in nem seperaten ordner und installiere das ganze mit einer batch datei. gibts da noch irgendeine möglichkeit beim start von dem delphiprojekt zu checken ob die bde installiert is udn wenn nich das ganze dann automatisch zu machen? das man die BdeInst.dll und regsvr32.exe als resource dateien mit einbindet. oder irgendwie so^^
     
  8. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    Sollte eigentlich gehen wenn du das ganze in dein Programm rein Programmmierst.
    Nur wird das Programm dann natürlich größer.

    Überprüfen, ob die Datei registriert ist kannste über die Registry: Hier stehen paar Pfade bin mir aber nicht sicher ob die Stimmen.

    Ansonsten registrieren und unregistrieren machste ja mit dem Aufruf von regsvr32.

    //Edit: Oder ohne Registry was evtl zwar nicht sauber wäre, aber einfacher.
    Du erstellst ein Dummy Objekt für die Datenbank und wenn nen fehler auftritt fangst du den ab und weisst das die DLL nicht registriert ist.

    //Edit2:
    Ich war mal so net und hab mal eine Funktion geschrieben die dir das Erledigt:
    Code:
    uses Windows, Forms, SysUtils, Variants, ComObj, ShellAPI;
    
    ...
    
    function CheckBDEInstall(): Boolean;
    type FDllRegisterServer = function (): Integer of object;
    var hInstall : HINST;
     DllRegisterServer : FDllRegisterServer;
     InstallPath : String;
    begin
     InstallPath := GetRegStringValue('SOFTWARE\Borland\BLW32', 'BLAPIPATH', HKEY_LOCAL_MACHINE);
    
     if InstallPath = NullAsStringValue then
     begin
     if MessageBox(Application.Handle,
     PChar('Benötigte Komponenten nicht gefunden. ' + #10#13 +
     'Ohne diese kann die Anwendung nicht ausgeführt werden und wird beendet. ' + #10#13 +
     'Möchten Sie diese jetzt installieren?'),
     PChar('Borland Database Engine'), MB_ICONWARNING + MB_YESNO) = IDYES then
     begin
     hInstall := LoadLibrary(PChar('BDEINST.dll'));
     @DllRegisterServer := GetProcAddress(hInstall, PChar('DllRegisterServer'));
    
     if Assigned(DllRegisterServer) then
     begin
     if (DllRegisterServer()=0) then
     ShellExecute(0, nil, PChar(Application.ExeName), nil, nil, SW_SHOW)
     end
     else
     raise Exception.CreateFmt('Installtionsbibliothek ''BDEINST.dll'' konnte nicht gefunden werden.',[]);
     end;
    
     Result := False;
     end
     else
     Result := True;
    end;
    
    Die Datei BDEINST.dll muss im selben Ordner sein wie dein Programm.

    Zum Benutzen soltest du die Funktion als erstes in deiner program Unit wie folgt aufrufen, das Bewirkt das Programm sich nicht startet wenn man die BDE nicht installiert:
    Code:
    if not CheckBDEInstall() then Exit;
    Mfg Rushh0ur
     
  9. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    omg danke erstma dass du dir sone mühe machst!
    wo genau soll ich jetzt "if not CheckBDEInstall() then Exit;" aufrufen? habs mit formcreate versucht aber scheint nich zu gehen.
     
  10. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    Unter Ansicht->Units.. die Unit Suchen die den Programmstart definiert, meistens heisst die so wie das Projekt und sollte dann in etwa so aussehen:

    Spoiler
    Code:
    [B]program [/B]Project1;
    
    uses
     Windows, Forms, SysUtils, Variants, ComObj, ShellAPI,
     Unit1 in 'Unit1.pas' {Form1};
    
    {$R *.res}
    
    function CheckBDEInstall(): Boolean;
    type FDllRegisterServer = function (): Integer of object;
    var hInstall : HINST;
     DllRegisterServer : FDllRegisterServer;
     InstallPath : String;
    begin
     InstallPath := GetRegStringValue('SOFTWARE\Borland\BLW32', 'BLAPIPATH', HKEY_LOCAL_MACHINE);
    
     if InstallPath = NullAsStringValue then
     begin
     if MessageBox(Application.Handle,
     PChar('Benötigte Komponenten nicht gefunden. ' + #10#13 +
     'Ohne diese kann die Anwendung nicht ausgeführt werden und wird beendet. ' + #10#13 +
     'Möchten Sie diese jetzt installieren?'),
     PChar('Borland Database Engine'), MB_ICONWARNING + MB_YESNO) = IDYES then
     begin
     hInstall := LoadLibrary(PChar('BDEINST.dll'));
     @DllRegisterServer := GetProcAddress(hInstall, PChar('DllRegisterServer'));
    
     if Assigned(DllRegisterServer) then
     begin
     if (DllRegisterServer()=0) then
     ShellExecute(0, nil, PChar(Application.ExeName), nil, nil, SW_SHOW)
     end
     else
     raise Exception.CreateFmt('Installtionsbibliothek ''BDEINST.dll'' konnte nicht gefunden werden.',[]);
     end;
    
     Result := False;
     end
     else
     Result := True;
    end;
    
    begin
     [B]if not CheckBDEInstall() then Exit;[/B]
     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
    end.
    

    Mfg Rushh0ur
     
  11. 29. März 2010
    AW: [Delphi] Frage zu Datenbank

    omg es geht!!^^
    supergeile sache
    ich danke dir!
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.