Автор Тема: Lazarus и mysql 5  (Прочетена 3437 пъти)

stok4o

  • Участници
  • ***
  • Публикации: 6
    • Профил
Lazarus и mysql 5
« -: Jul 25, 2007, 00:42 »
Здравейте, от скоро се занимавам с Lazarus. Намерих ръководство за връзка с mySQL 5. Работи! Проблема е, че мога да изпълнявам само SELECT запитвания.

Винаги ми казва dataset is read-only.


unit utrymysql;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, ComCtrls, sqldb, mysql50conn,db, DbCtrls;

type

  { TFormTryMySQL }

  TFormTryMySQL = class(TForm)
    DBEdit1: TDBEdit;
    MySQLConnection1: TMySQL50Connection;
    OpenQueryButton: TButton;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    ConnectButton: TButton;
    ExitButton: TButton;
    CommandEdit: TEdit;
    CommandLabel: TLabel;
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    procedure Button1Click(Sender: TObject);
    procedure ConnectButtonClick(Sender: TObject);
    procedure ExitButtonClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure FormCreate(Sender: TObject);
    procedure OpenQueryButtonClick(Sender: TObject);
    private
    { private declarations }
    procedure ClearSettings;
    procedure CloseConnection(Sender: TObject);
    procedure ShowString(const S: String);
  public
    { public declarations }
  end;

var
  FormTryMySQL: TFormTryMySQL;

implementation

uses
  UShowQuery;

{ TFormTryMySQL }

procedure TFormTryMySQL.ConnectButtonClick(Sender: TObject);
begin
  // Check if we have an active connection. If so, let's close it.
  if MySQLConnection1.Connected then begin
    SQLTransaction1.Active := False;
    MySQLConnection1.Close;
  end;
  // Set the connection parameters.
  MySQLConnection1.HostName := 'localhost';
  MySQLConnection1.UserName := 'user';
  MySQLConnection1.Password := 'pass';
  MySQLConnection1.DatabaseName := 'mysql'; // MySQL is allways there!
  ShowString('Opening a connection to server: localhost''<img'>;
  MySQLConnection1.Open;
  MySQLConnection1.DatabaseName := 'baza';

  // First lets get a list of available databases.
  if MySQLConnection1.Connected then begin
    ShowString('Connected to server: localhost''<img'>;
    ShowString('Retreiving list of available databases.''<img'>;

    SQLQuery1.SQL.Text := 'show databases';
    SQLQuery1.Open;
  // Go to the first record [modified by Arwen]
    if SQLQuery1.Active then begin
      SQLQuery1.First;
      ShowString('Query ACTIVE and at the first record''<img'>;
    end
    else
      ShowString('Query NOT ACTIVE''<img'>;
      
  // Read DATABASES
    while not SQLQuery1.EOF do begin

      SQLQuery1.Next;
    end;
    SQLQuery1.Close;
    ShowString('List of databases received!''<img'>;
  end;
end;

procedure TFormTryMySQL.Button1Click(Sender: TObject);
begin
  ShowQueryForm := TSHowQueryForm.Create(nil);
  try
    ShowQueryForm.ShowModal;
  finally
    ShowQueryForm.Free;

  end;
end;



procedure TFormTryMySQL.ExitButtonClick(Sender: TObject);
begin
  Close;
end;

procedure TFormTryMySQL.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  // Make sure our connection is closed, when we close our application.
  if MySQLConnection1.Connected then CloseConnection(Sender);
  CanClose := True;
end;

procedure TFormTryMySQL.FormCreate(Sender: TObject);
begin
  ShortTimeFormat := 'hh:nn:ss.zzz';
end;

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject);
begin
  ShowQueryForm := TShowQueryForm.Create(nil);
  try
    ShowQueryForm.DataSource1.DataSet := SQLQuery1;

     SQLQuery1.SQL.Text := CommandEdit.Text;

     SQLQuery1.Post;
     SQLQuery1.ApplyUpdates;
     SQLTransaction1.CommitRetaining;




    ShowQueryForm.ShowModal;
  finally
    ShowQueryForm.Free;
    SQLQuery1.Close;
  end;
end;





procedure TFormTryMySQL.ClearSettings;
begin

  OpenQueryButton.Enabled := Enabled;
end;

procedure TFormTryMySQL.CloseConnection(Sender: TObject);
begin
  // The SQLTransaction1 gets activated automatically, but before we can close
  // the connection we have to set the SQLTransaction1.Active to false.
  SQLTransaction1.Active := False;
  MySQLConnection1.Close;
  // Information about the list of tables will propably needs refresh
  // and the fields list of course as well.

  // OpenQueryButton should be disabled anyhow.
  OpenQueryButton.Enabled := False;
  // If this is called from anything else then from SelectDBButtonClick
  // the SelectDBButton should be disabled as well.

end;

procedure TFormTryMySQL.ShowString(const S: String);
begin
  Memo1.Lines.Add(TimeToStr(now) + ': ' + S);
end;

initialization
  {$I utrymysql.lrs}

end.
        


Някакви идеи?

Lazarus 0.9.22 beta по windows
Активен

stok4o

  • Участници
  • ***
  • Публикации: 6
    • Профил
Lazarus и mysql 5
« Отговор #1 -: Jul 25, 2007, 00:43 »
Винаги - при INSERT или UPDATE ....
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Lazarus и mysql 5
« Отговор #2 -: Jul 25, 2007, 00:47 »
Без да съм гледал много-много сорса - GRANT-нал ли си права за UPDATE,INSERT за съответния user@localhost за съответната database/tables?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

stok4o

  • Участници
  • ***
  • Публикации: 6
    • Профил
Lazarus и mysql 5
« Отговор #3 -: Jul 25, 2007, 00:51 »
Да.
Активен

stok4o

  • Участници
  • ***
  • Публикации: 6
    • Профил
Lazarus и mysql 5
« Отговор #4 -: Jul 25, 2007, 14:36 »
// Just simple execute a !non-select! command
  SQLQuery1.ParseSQL:=true;
  SQLQuery1.ReadOnly:=false;
  SQLQuery1.SQL.Text:=CommandEdit.Text;
  SQLQuery1.ExecSQL;
  SQLQuery1.ParseSQL:=false;
  SQLQuery1.ReadOnly:=true;    



Работи !!!
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus и mysql 5
« Отговор #5 -: Sep 20, 2012, 11:36 »
Опитвам се да използвам TDBNavigator. Разглеждането на базата данни си работи, но редактирането и вмъкването - не. Опитвам се да използвам TDBCustomNavigator.BtnClick при цъкане върху бутоните Insert, Edit и Post, но не мога да схвана как се ползва тази процедура. Пример в нета също не откривам. Помощ моля :) !

PS: Ако ви се случи, да знаете, че съм се опитвал да редактирам и вмъквам във view (виртуална таблица), а когато се ползват повече от една таблица, с MySQL това не може да стане.
« Последна редакция: Sep 29, 2012, 10:18 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
Re: Lazarus и mysql 5
« Отговор #6 -: Sep 20, 2012, 11:56 »
Ето тук едно недовършено (деба липсата на време) проектче което ползва MySQL със всякакви видове заявки

https://github.com/sdrsdr/shrm
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus и mysql 5
« Отговор #7 -: Sep 20, 2012, 12:16 »
Но не ползваш TDBNavigator ...
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
Re: Lazarus и mysql 5
« Отговор #8 -: Sep 20, 2012, 16:15 »
http://www.delphipages.com/forum/showthread.php?t=186425

 ClientDataSet.Post; ClientDataSet.ApplyUpdates(-1); ClientDataSet.Refresh;
OnPost event
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Lazarus и mysql 5
« Отговор #9 -: Sep 21, 2012, 10:42 »
Това е ясно. Но преди това трябва да съм в .Edit или .Append , но не става автоматично при цъкане на съответните бутончета в DBNavigator-а. Мога да го направя като си сложа собствени бутони, но тогава трябва да скрия тези от навигатора.

Edit: То било лесно, ама ... Веднага ще ви стане ясно:

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
« Последна редакция: Sep 21, 2012, 11:01 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Access или ODBC компонент за Lazarus
Общ форум
nforcer 0 1132 Последна публикация Mar 18, 2005, 13:12
от nforcer
Lazarus
Общ форум
gotha 3 2183 Последна публикация Apr 13, 2007, 21:05
от gotha
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 5132 Последна публикация Mar 16, 2008, 01:17
от neter
Lazarus
Общ форум
l_fen 1 2245 Последна публикация May 23, 2008, 09:18
от runtime
Lazarus (Free Pascal) и база данни
Общ форум
laskov 5 3155 Последна публикация Dec 05, 2012, 12:49
от laskov