AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL Daten Bank Editor
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Daten Bank Editor

Ein Thema von Natura · begonnen am 26. Apr 2009 · letzter Beitrag vom 28. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Natura

Registriert seit: 26. Apr 2009
7 Beiträge
 
#1

MySQL Daten Bank Editor

  Alt 26. Apr 2009, 21:44
Datenbank: MySQL • Version: 5.0.51b • Zugriff über: eigene php DB editor script
Hi ich will einen Datenbank editor erstellen habe es auch fast geschaft und weiter weiß ich leider nicht mehr.

Bin noch Änfänger sprich lerne es erst seit 1 Jahr

// Mann kann sich einloggen
// Mann Findet alle informationen bzw alle sql einträge

so jetzt zu meinem Problem ich will damit auch die Datenbank bearbeiten können.

Was mir noch fehlt und wo ich hilfe brauche :

// Edior Feld für beide Tabellen
// Logout Button
// Ein Button um eine tabelle zu einzufügen

Wär für hilfe sehr dankbar

Der Quellcode

Delphi-Quellcode:
unit dbeditor;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls, mysql, sEdit, sButton, sSkinManager,
  sLabel;

type
  TForm1 = class(TForm)
    Bevel1: TBevel;
    DatabaseListBox: TListBox;
    TableListBox: TListBox;
    TableStringGrid: TStringGrid;
    FieldListGrid: TStringGrid;
    sSkinManager1: TsSkinManager;
    LoginButton: TsButton;
    PasswordEdit: TsEdit;
    UserEdit: TsEdit;
    HostEdit: TsEdit;
    sLabelFX1: TsLabelFX;
    sLabelFX2: TsLabelFX;
    sLabelFX3: TsLabelFX;
    sLabelFX4: TsLabelFX;
    sLabelFX5: TsLabelFX;
    sLabelFX7: TsLabelFX;
    sLabelFX8: TsLabelFX;
    sLabelFX9: TsLabelFX;
    sLabelFX10: TsLabelFX;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DatabaseListBoxClick(Sender: TObject);
    procedure TableListBoxClick(Sender: TObject);
    procedure LoginButtonClick(Sender: TObject);
  private
    LibHandle: PMYSQL;
    ConHandle: PMYSQL;
    function DoQuote(const s: String): String;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ClearGrid(Grid: TStringGrid);
var
  row, col: Integer;
begin
  for row := 1 to Grid.RowCount - 1 do
    for col := 0 to Grid.ColCount - 1 do
      Grid.Cells[col, row] := '';
end;

procedure TForm1.DatabaseListBoxClick(Sender: TObject);
var
  MyResult: Integer;
  mySQL_Res: PMYSQL_RES;
  MYSQL_ROW: PMYSQL_ROW;
begin
  TableListBox.Items.Clear;
  ClearGrid(FieldListGrid);
  TableListBox.Enabled := False;
  with DatabaseListBox do
    MyResult := mysql_select_db(ConHandle, PAnsiChar(Items[ItemIndex]));
  if MyResult<>0
  then
    raise Exception.Create(mysql_error(ConHandle));

  mySQL_Res := mysql_list_tables(ConHandle, nil);
  if mySQL_Res=nil
  then
    raise Exception.Create(mysql_error(ConHandle));
  try
    repeat
      MYSQL_ROW := mysql_fetch_row(mySQL_Res);
      if MYSQL_ROW<>nil
      then begin
        TableListBox.Items.Add(MYSQL_ROW^[0]);
      end;
    until MYSQL_ROW=nil;
  finally
    mysql_free_result(mySQL_Res);
  end;
  if TableListBox.Items.Count>0
  then begin
    TableListBox.Enabled := True;
  end;
end;

function TForm1.DoQuote(const s: String): String;
begin
  SetLength(Result, Length(s)*2+1);
  SetLength(Result, mysql_real_escape_string(ConHandle,
                                             Pointer(Result),
                                             PChar(s),
                                             Length(s)));
  Result := '`' + Result + '`';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  libmysql_fast_load(nil);
  LibHandle := mysql_init(nil);
  FieldListGrid.Cells[0, 0] := 'Name';
  FieldListGrid.Cells[1, 0] := 'Type';
  FieldListGrid.Cells[2, 0] := 'Len';
  FieldListGrid.Cells[3, 0] := 'Flags';
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  mysql_close(LibHandle);
  libmysql_free;
end;

procedure TForm1.LoginButtonClick(Sender: TObject);
var
  mySQL_Res: PMYSQL_RES;
  MYSQL_ROW: PMYSQL_ROW;
begin
  DatabaseListBox.Items.Clear;
  DatabaseListBox.Enabled := False;
  ConHandle := mysql_real_connect(LibHandle,
                                  PAnsiChar(HostEdit.Text),
                                  PAnsiChar(UserEdit.Text),
                                  PAnsiChar(PasswordEdit.Text),
                                  nil, 0, nil, 0);
  if ConHandle=nil
  then
    raise Exception.Create(mysql_error(LibHandle));
  Caption := HostEdit.Text + ' '  + mysql_get_server_info(ConHandle);

  mySQL_Res := mysql_list_dbs(ConHandle, nil);
  if mySQL_Res=nil
  then
    raise Exception.Create(mysql_error(ConHandle));
  try
    repeat
      MYSQL_ROW := mysql_fetch_row(mySQL_Res);
      if MYSQL_ROW<>nil
      then begin
        DatabaseListBox.Items.Add(MYSQL_ROW^[0]);
      end;
    until MYSQL_ROW=nil;
  finally
    mysql_free_result(mySQL_Res);
  end;
  if DatabaseListBox.Items.Count>0
  then begin
    LoginButton.Enabled := False;
    DatabaseListBox.Enabled := True;
  end;
end;

function GetFieldTypeString(mySQL_Field: PMYSQL_FIELD): String;
const
  FieldtypeString1: array [MYSQL_TYPE_DECIMAL..MYSQL_TYPE_BIT] of String=(
   'NUMERIC', 'TINYINT', 'SMALLINT', 'INTEGER',
   'FLOAT', 'DOUBLE', 'T_NULL', 'TIMESTAMP',
   'BIGINT', 'MEDIUMINT', 'DATE', 'TIME',
   'DATETIME', 'YEAR', 'NEWDATE', 'VARCHAR',
   'BIT');
  FieldtypeString2: array [MYSQL_TYPE_NEWDECIMAL..MYSQL_TYPE_GEOMETRY] of String=(
    'NEWDECIMAL', 'ENUM', 'SET',
    'TINY_BLOB', 'MEDIUM_BLOB', 'LONG_BLOB', 'BLOB',
    'VAR_STRING', 'STRING', 'GEOMETRY');
begin
  if mysql_field_type(mySQL_Field) in [MYSQL_TYPE_DECIMAL..MYSQL_TYPE_BIT]
  then
    Result := FieldtypeString1[mysql_field_type(mySQL_Field)]
  else
  if mysql_field_type(mySQL_Field) in [MYSQL_TYPE_NEWDECIMAL..MYSQL_TYPE_GEOMETRY]
  then
    Result := FieldtypeString2[mysql_field_type(mySQL_Field)]
  else
    Result := 'unknown';
end;

function GetFieldFlagString(mySQL_Field: PMYSQL_FIELD): String;
begin
  Result := '';
  if IS_NUM_FIELD(mySQL_Field)
  then begin
    if (mysql_field_flag(mySQL_Field) and UNSIGNED_FLAG) <> 0
    then
      Result := ' UNSIGNED';
    if (mysql_field_flag(mySQL_Field) and AUTO_INCREMENT_FLAG) <> 0
    then
      Result := Result + ' INC';
  end
  else begin
    if (mysql_field_flag(mySQL_Field) and ENUM_FLAG)<>0
    then
      Result := ' ENUM'
    else
    if (mysql_field_flag(mySQL_Field) and SET_FLAG)<>0
    then
      Result := ' SET'
    else
    if (mysql_field_flag(mySQL_Field) and BLOB_FLAG)<>0
    then
      Result := ' BLOB';
  end;
  if IS_NOT_NULL(mysql_field_flag(mySQL_Field))
  then
    Result := Result + ' NOT NULL';
end;

procedure TForm1.TableListBoxClick(Sender: TObject);
var
  i, r, field_count, row_count: Integer;
  mySQL_Res: PMYSQL_RES;
  MYSQL_ROW: PMYSQL_ROW;
  mySQL_Field: PMYSQL_FIELD;
  sql: String;
  tablename: String;
begin
  ClearGrid(FieldListGrid);
  with TableListBox do
    tablename := Items[ItemIndex];
  tablename := DoQuote(tablename);

  sql := 'select * from ' + tablename;
  if mysql_real_query(ConHandle, PChar(sql), Length(sql))<>0
  then
    raise Exception.Create(mysql_error(ConHandle));
  mySQL_Res := mysql_store_result(ConHandle);
  if mySQL_Res<>nil
  then begin
    try
      
      field_count := mysql_num_fields(mySQL_Res);
      FieldListGrid.RowCount := field_count+1;
      TableStringGrid.ColCount := field_count;
      for i := 0 to field_count - 1 do
      begin
        mySQL_Field := mysql_fetch_field(mySQL_Res);
        if mySQL_Field<>nil
        then begin
          TableStringGrid.Cells[i, 0] := mysql_field_name(mySQL_Field);
          FieldListGrid.Cells[0, i+1] := mysql_field_name(mySQL_Field);
          FieldListGrid.Cells[1, i+1] := GetFieldTypeString(mySQL_Field);
          FieldListGrid.Cells[2, i+1] := IntToStr(mysql_field_length(mySQL_Field));
          FieldListGrid.Cells[3, i+1] := GetFieldFlagString(mySQL_Field);
        end;
      end;
      //Get Data
      row_count := mysql_num_rows(mySQL_Res);
      if row_count>0
      then begin
        TableStringGrid.RowCount := row_count + 1;
        for r := 1 to row_count do
        begin
          MYSQL_ROW := mysql_fetch_row(mySQL_Res);
          if MYSQL_ROW<>nil
          then begin
            for i := 0 to field_count - 1 do
              TableStringGrid.Cells[i, r] := MYSQL_ROW^[i];
          end;
        end;
      end
      else begin
        TableStringGrid.RowCount := 2;
        for i := 0 to field_count - 1 do
          TableStringGrid.Cells[i, 1] := '';
      end;
    finally
      mysql_free_result(mySQL_Res);
    end;
  end;
end;

end.
hier auch die beta version zum Downloaden im Anhang

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
Angehängte Dateien
Dateityp: rar dbeditor_109.rar (1,01 MB, 11x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MySQL Daten Bank Editor

  Alt 26. Apr 2009, 21:50
Scheint aber Win32 und kein .Net zu sein.
Markus Kinzler
  Mit Zitat antworten Zitat
26. Apr 2009, 21:51
Dieses Thema wurde von "mkinzler" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Datenbanken" verschoben.
Kein Vorschlag zur CodeLibrary sondern eine Frage
Natura

Registriert seit: 26. Apr 2009
7 Beiträge
 
#4

Re: MySQL Daten Bank Editor

  Alt 26. Apr 2009, 22:03
Ja natürlich sorry ist win 32 hatte mich verdrückt.

//PS. so besser habe es geändert
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: MySQL Daten Bank Editor

  Alt 26. Apr 2009, 22:04
Dann ändere das Bitte.
Markus Kinzler
  Mit Zitat antworten Zitat
Natura

Registriert seit: 26. Apr 2009
7 Beiträge
 
#6

Re: MySQL Daten Bank Editor

  Alt 27. Apr 2009, 09:33
mhhhhh?????
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#7

Re: MySQL Daten Bank Editor

  Alt 27. Apr 2009, 09:34
Delphi-Code wäre die bessere (lesbarere) Variante zum Formatieren des Quellcodes (bitte den Eingangsbeitrag nochmal überarbeiten).

Ich verstehe deine Probleme nicht:

Zitat:
// Edior Feld für beide Tabellen
Für welche "beiden" Tabellen soll es ein Editor-Feld geben? Was soll dort eingegeben werden und zu welchem Zweck?

Zitat:
// Logout Button
Wie wäre es mit einem Button, der Connection.Close ausführt?

Zitat:
// Ein Button um eine tabelle zu einzufügen
Wie wäre es mit einem Button, der einen SQL-Befehl "CREATE TABLE ..." erstellt und ausführt?

Zu den Möglichkeiten, die MySql dazu bietet, siehe u.a. Create Table.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Natura

Registriert seit: 26. Apr 2009
7 Beiträge
 
#8

Re: MySQL Daten Bank Editor

  Alt 27. Apr 2009, 10:12
Danke das mit dem logout button hab ich eine andere variante gewält. Ja ein button mit dem man eine CREATE TABLE ausführt

mit dem editor feld möschte ich einträge in den sql tabellen bearbeiten wie bei Nvicat+MySQL (http://www.navicat.com/)

Hier 1 Bilde so wie es Fertig aussehen soll.

s. Anhang


[edit=Admin]Bild in den Anhang verfrachtet. Mfg, Daniel[/edit]
Miniaturansicht angehängter Grafiken
unbenannt_334.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#9

Re: MySQL Daten Bank Editor

  Alt 27. Apr 2009, 14:19
Das kann so nicht funktionieren.
Bei den Spalten musst Du ja noch Zusatzinformationen wie Datentyp etc. angeben können. Nur der Name reicht nicht.

Schau Dir mal an, wie die Jungs von HeidiSQL das gelöst haben. HeidiSQL ist übrigens auch mit Delphi geschrieben und OpenSource. Das heisst Du kannst da gucken wie das im Detail gemacht wurde, und HeidiSQL ist ein geniales Management-Tool für MySQL-Datenbanken.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Natura

Registriert seit: 26. Apr 2009
7 Beiträge
 
#10

Re: MySQL Daten Bank Editor

  Alt 27. Apr 2009, 16:48
Hidisql ist gut aber nicht ganz das was ich wollte gibt es auc hidisql componeten für delphi 7 habe nur welche für delphi 10 und 11 gibt es auch einen anderen weg z.B das ich direckt an den tabelen die einträge bearbeiten kann. wie z.B bei Navicat
  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:26 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