Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: PROCEDURE MySQL


BEGIN
DECLARE i INT DEFAULT 10;
IF (id>0) THEN
wet : WHILE i>0 DO
IF(@pid = 8)
THEN LEAVE wet;
ELSE
SELECT
@id := topic_id, @pid := topic_pid
FROM topic
WHERE topic_id = id;
END IF;
SET id = @pid;
SET i=i-1;
END WHILE wet;
ELSE
SELECT
'Задайте правильный id';
END IF;
END


Создал процедуру, в phpmyadmin все хорошо, возвращает все записи которые по циклу идут. Если вызываю процедуру в php получаю только первую выборку, в чем проблема?

$result = Mysql::query("CALL `getPid`($category)");
$assoc = array();
while ($row = mysql_fetch_assoc($result)) {
$assoc[] = $row;
}
echo '<pre>'.print_r($assoc,1).'</pre>';
Ответ: на mysqli сделал так


$mysqli->multi_query("CALL `getPid`($category)");
do {
if ($res = $mysqli->store_result()) {
while ($row = $res->fetch_assoc())
echo '<pre>'.print_r($row,1).'</pre>';
}
}
while ($mysqli->more_results() && $mysqli->next_result());


Все успешно. А для mysql как такое же сделать? Че решения не могу найти :unsure:
Вопрос: Ошибка соединения Oracle MySQL и Delphi 7

Доброго времени суток всем!
Никак не могу понять/найти причины ошибки.
Имею:
Delphi 7
MySQL 5.5.23 Community Server (GPL)
Связь через ADOConnection и ADOQuery
Листинг:
Код Delphi

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, DB, ADODB, DBGrids, ComCtrls,
  ToolWin, ActnMan, ActnCtrls, ActnMenus, StdStyleActnCtrls, ActnList, Buttons,
  DBCtrls, Grids;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    N1: TMenuItem;
    Connect1: TMenuItem;
    N2: TMenuItem;
    Exit1: TMenuItem;
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    ComboBox1: TComboBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    DateTimePicker1: TDateTimePicker;
    TabSheet2: TTabSheet;
    DBGrid1: TDBGrid;
    TabSheet3: TTabSheet;
    ListBox1: TListBox;
    TabSheet4: TTabSheet;
    StringGrid1: TStringGrid;
    Close1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Connect1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure TabSheet2Show(Sender: TObject);
    procedure TabSheet3Show(Sender: TObject);
    procedure Predmets;
    procedure Svodka_1;
    procedure MSConnect;
    procedure TabSheet4Show(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Close1Click(Sender: TObject);
    
  private
     { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  node: TTreeNode;
  DateTimePicker1: cardinal;
  Predmet: array of string;
  ID_Predmet: array of integer;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
MSConnect;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Panel1.Visible:=false;
end;
 
procedure TForm1.Exit1Click(Sender: TObject);
begin
ADOConnection1.Connected := false;
pagecontrol1.Visible := false;
connect1.Enabled := true;
exit1.Enabled := false;
end;
 
procedure TForm1.Connect1Click(Sender: TObject);
begin
Panel1.Visible:=true;
PageControl1.Visible:=False;
end;
 
procedure TForm1.MSConnect;
begin
Form1.ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider = MSDASQL.1'+
';Password = ' + Edit3.Text +
';PersistSecurityInfo = False' +
';UserID = ' + Edit2.Text +
';DataSource = ' + Edit1.Text +
';InitialCatalog = ' + Edit4.Text;
try
ADOConnection1.Open;
except
ShowMessage('Не могу соединиться с базой данных!');
exit;
end;
panel1.Visible := false;
pagecontrol1.Height := form1.ClientHeight;
pagecontrol1.Width := form1.ClientWidth;
pagecontrol1.ActivePage := tabsheet1;
pagecontrol1.Visible := true;
connect1.Enabled := false;
exit1.Enabled := true;
Predmets;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
pagecontrol1.Visible := false;
pagecontrol1.Top:=0;
pagecontrol1.Left:=0;
panel1.Top:=10;
panel1.Left:=210;
dbgrid1.Parent:=tabsheet2;
dbgrid1.Top:=0;
dbgrid1.Left:=0;
dbgrid1.Height:=tabsheet2.ClientHeight;
dbgrid1.Width:=tabsheet2.ClientWidth;
StringGrid1.Cells[1,1]:='Успевают на';
StringGrid1.Cells[1,2]:='5';
StringGrid1.Cells[1,3]:='4-5';
StringGrid1.Cells[1,4]:='3-4-5';
StringGrid1.Cells[1,5]:='2';
StringGrid1.Cells[2,1]:='Количество';
StringGrid1.Cells[3,1]:='%';
end;
 
procedure TForm1.FormResize(Sender:TObject);
begin
pagecontrol1.Height:=form1.ClientHeight;
pagecontrol1.Width:=form1.ClientWidth;
end;
 
 
procedure TForm1.Button4Click(Sender: TObject);
begin
Edit10.Text:='';
Edit9.Text:='';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Anketa where fam ='+''''+Edit5.Text+'''');
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = true then
begin
ShowMessage('Данных об этом студенте нет');
exit;
end;
edit6.Text:=ADOQuery1.Fields[1].Value;
edit7.Text:=ADOQuery1.Fields[2].Value;
edit9.Text:=ADOQuery1.Fields[4].Value;
edit10.Text:=ADOQuery1.Fields[5].Value;
edit8.Text:=ADOQuery1.Fields[3].Value;
end;
 
procedure TForm1.TabSheet2Show(Sender:TObject);
begin
ADOQuery1.SQL.Clear;
if Edit10.Text = '' then
begin
ADOQuery1.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился, id_gruppi as Группа from Anketa order by fam');
end
else
begin
ADOQuery1.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился');
ADOQuery1.SQL.Add('select * from Anketa where id_gruppi ='+''''+Edit10.Text+'''');
ADOQuery1.SQL.Add('order by fam');
end;
ADOQuery1.Open;
end;
 
procedure TForm1.Svodka_1;
var
id_stud: array of integer;
i, j: integer;
num: array [2..5] of byte;
begin
for i:=2 to 3 do for j:=2 to 5 do StringGrid1.Cells[i,j]:=inttostr(0);
i:=0; j:=0;
ADOQuery1.SQL.Clear;
if edit10.Text = '' then ADOQuery1.SQL.Add('select id_stud from anketa')
else ADOQuery1.SQL.Add('select id_stud from anketa where id_gruppi ='+edit10.Text);
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
SetLength(ID_stud, i+1);
id_stud[i]:= ADOQuery1.Fields[0].Value;
inc(i);
ADOQuery1.Next;
end;
StringGrid1.Cells[1,0]:= 'Группа'+Edit10.Text;
StringGrid1.Cells[3,0]:= 'Количество студентов - '+inttostr(length(id_stud));
for i:=0 to length(id_stud) - 1 do
begin
for j:=2 to 5 do num[j]:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka from uspevaemost where');
ADOQuery1.SQL.Add('id_stud = '+IntToStr(id_stud[i]));
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
case ADOQuery1.Fields[0].Value of
2: inc(num[2]);
3: inc(num[3]);
4: inc(num[4]);
5: inc(num[5]);
end;
ADOQuery1.Next;
end;
for j:=2 to 5 do if num[j]>0 then
begin
StringGrid1.Cells[2,7-j]:= IntToStr(StrToInt(StringGrid1.Cells[2,7-j])+1);
break;
end;
end;
for i:=2 to 5 do StringGrid1.Cells[3,i]:=FormatFloat('0.00',(StrToInt(StringGrid1.Cells[2,i])/length(id_stud))*100);
end;
 
procedure TForm1.Predmets;
var
i: integer;
begin
i:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Predmet order by id_predm');
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
SetLength(Predmet,i+1);
SetLength(ID_Predmet,i+1);
ID_Predmet[i]:= ADOQuery1.Fields[0].Value;
Predmet[i]:= ADOQuery1.Fields[1].Value;
combobox1.Items.Add(Predmet[i]);
inc(i);
ADOQuery1.Next;
end;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
if edit5.Text = '' then exit;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select * from Anketa where fam ='+''''+Edit5.Text+'''');
ADOQuery1.SQL.Add('and imya = '+''''+Edit6.Text+'''');
ADOQuery1.SQL.Add('and otchestvo = '+''''+Edit7.Text+'''');
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select id_stud from anketa order by id_stud');
ADOQuery1.Open;
ADOQuery1.Last;
edit9.Text:=IntToStr(ADOQuery1.Fields[0].Value+1);
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into Anketa values(');
ADOQuery1.SQL.Add(''''+Edit5.Text+''''+',');//фамилия
ADOQuery1.SQL.Add(''''+Edit6.Text+''''+',');//имя
ADOQuery1.SQL.Add(''''+Edit7.Text+''''+',');//отчество
ADOQuery1.SQL.Add(''''+Edit8.Text+''''+',');//дата рождения
ADOQuery1.SQL.Add(Edit9.Text+',');//id студента
ADOQuery1.SQL.Add(Edit10.Text+')');//группа
try
ADOQuery1.ExecSQL;
except
edit9.Text:='';
ShowMessage('Не могу записать данные, проверьте правильность ввода');
exit;
ShowMessage('Запись добавлена');
end;
end;
 
procedure TForm1.TabSheet3Show(Sender:TObject);
var
j:integer;
begin
listbox1.Clear;
listbox1.Items.Add('Оценки за '+''''+FormatDateTime('dd.mm.yyyy', DateTimePicker1.Date)+'''');
j:=0;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka, id_predm from uspevaemost where id_stud = '+Edit9.Text);
ADOQuery1.SQL.Add('and data_ocenki = '+''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+'''');
ADOQuery1.SQL.Add('order by id_predm');
ADOQuery1.Open;
ADOQuery1.First;
while ADOQuery1.Eof = false do
begin
for j:=0 to length(predmet)-1 do if ADOQuery1.Fields[1].Value= ID_Predmet[j] then break;
listbox1.Items.Add(predmet[j]+'-'+IntToStr(ADOQuery1.Fields[0].Value));
ADOQuery1.Next;
end;
end;
 
procedure TForm1.TabSheet4Show(Sender:TObject);
begin
Svodka_1;
end;
 
procedure TForm1.Button6Click(Sender: TObject);
begin
if edit11.Text = '' then exit;
if combobox1.Text = '' then exit;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ocenka from uspevaemost where id_stud = '+Edit9.Text);
ADOQuery1.SQL.Add('and data_ocenki = '+''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+'''');
ADOQuery1.SQL.Add('and id_predm = '+IntToStr(ID_Predmet[combobox1.ItemIndex]));
ADOQuery1.Open;
ADOQuery1.First;
if ADOQuery1.Eof = false then
begin
ShowMessage('Оценка уже существует');
exit;
end;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('insert into uspevaemost values(');
ADOQuery1.SQL.Add(Edit11.Text+',');//оценка
ADOQuery1.SQL.Add(Edit9.Text+',');//id студента
ADOQuery1.SQL.Add(IntToStr(ID_Predmet[combobox1.ItemIndex])+',');//id предмета
ADOQuery1.SQL.Add(Edit10.Text+',');//группа
ADOQuery1.SQL.Add(''''+FormatDateTime('mm.dd.yyyy',DateTimePicker1.Date)+''''+')');//дата
try
ADOQuery1.ExecSQL;
except
ShowMessage('Данные не внесены');
exit;
end;
ShowMessage('Оценка внесена');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit5.Text:='';
edit6.Text:='';
edit7.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
end;
 
procedure TForm1.Close1Click(Sender: TObject);
begin
Application.Terminate;
end;
 
end.
 :wizard 
ConnectionString и всё остальное (ADO) вроде как настроил по многочисленным туториалам и советам на просторах www. Но программа всё еще наотрез отказывается подключаться к БД. Строка подключения выглядит так (последний вариант, предыдущий был короче, но все равно не работал): Provider=MSDASQL.1;Password=(мой пароль);Persist Security Info=True;User ID=root;Extended Properties="DSN=MySQL;SERVER=localhost;UID=root;PWD=(мой пароль)ATABASE=studn;PORT=3306";Initial Catalog=studn  :wacko 
Я поставил неверные драйвера? Либо дело еще в чем? Ругается на синтаксис в строке подключения при попытке выставить в ADOQuery в object inspector атрибут Active: True
Ответ:
Принцип понятен. Но все равно не помогает. Та же ошибка, что и раньше. В построении connection string для MySQL server 5.5.23, по идее.

Этот ответ добавлен с нового Винграда - 
Вопрос: Обновление объединенных таблиц (MySQL, ADO, Delphi7)

Здравствуйте!
Есть ADODataSet с таким запросом:

+
select  
  IND_ORDER.ID_ORDER, 
  IND_ORDER.FIO, 
  IND_ORDER.PHONE,
  IND_ORDER.DEP_SEND, 
  IND_ORDER.ART, 
  IND_ORDER.COMP, 
  IND_ORDER.GOOD, 
  IND_ORDER.MAT, 
  IND_ORDER.SZ, 
  IND_ORDER.EMP_CREATE, 
  IND_ORDER.DATE_CREATE, 
  IND_ORDER.DEP_CUSTOM,
  IND_STATE.NAME,
  IND_ORDER.ID_STATE, 
  IND_ORDER.TYPE_ORDER,

  ORDER_HISTORY.EMP_STATE, 
  ORDER_HISTORY.DATE_STATE, 
  ORDER_HISTORY.NUMBER_DOC,
  ORDER_HISTORY.DATE_DOC, 
  ORDER_HISTORY.COMMENT, 
  ORDER_HISTORY.PRICE
from 
   IND_ORDER, IND_STATE, ORDER_HISTORY
where
    ( 
      ((IND_ORDER.DEL  <> 1) or (IND_ORDER.DEL is NULL)) and 
      (IND_ORDER.DEP_CUSTOM=:$DEP) and 
      (IND_ORDER.ID_STATE = IND_STATE.ID_STATE) and 
      (ORDER_HISTORY.ID_STATE = IND_STATE.ID_STATE) and 
      (IND_ORDER.TYPE_ORDER=1)  and  
      (IND_ORDER.id_state<>11)  and 
      (IND_ORDER.ID_ORDER=ORDER_HISTORY.ID_ORDER)
     )
order by IND_ORDER.ID_ORDER desc;


При попытке редактирования полей в гриде (cxGrid), возникает следующая ошибка: "Недостаточно сведений ключевого поля для обновления"

в базе триггеров на данных таблицах нет, update через запрос проходит без проблем



В последней статье вообще написано, что TADODataSet умный донельзя, и сам знает в какой таблице что обновить и формирует, при необходимости, 2 и более запросов на update каждой из с'join'еных таблиц. Да вот нет

Затем я редактировал на AfterOpen моего ADODataSet'а его динамические свойства:
+
procedure TDmOrd.order_OUTAfterOpen(DataSet: TDataSet);
begin
  ORDER_OUT.Properties['Unique Table'].Value := 'IND_ORDER';

  ORDER_OUT.Properties['Update Criteria'].Value := adCriteriaKey;
end;


так же выставил у ключевого поля (ID_ORDER) в ProviderFlags pfInUpdate, pfInWhere, pfInKey в true, а у остальных полей — в false (Это тоже совет из на этом форуме)

Это тоже не помогает. Может кто подскажет в чем проблема?
В прочитанных статьях были варианты изменения свойств непосредственно перед удалением/редактированием. Я пробовал все варианты. Понятно, что можно насыпать в dataModule горсть ADOQuery и в каждую написать по запросу на Update/Delete/Insert и потом вызывать их для каждого датасета, но неужели всё так плохо. Проще поверить, что я где-то накосячил и что-то недописал.

Заранее спасибо


Если бы здесь убивали за тупые вопросы, я бы сдох в первый же день
Ответ: Пока ничего не вышло. Создал новый проект только с этим датасетом. Все параметры те же, но ошибка при попытке сохранить изменения остались.
Приложу сюда код, вдруг кто даст дельный совет
+
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, DBGridEhGrouping, StdCtrls, ExtCtrls, GridsEh, DBGridEh;

type
  TfrmMain = class(TForm)
    Connection: TADOConnection;
    DataSet: TADODataSet;
    Grid: TDBGridEh;
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    DataSetID_ORDER: TIntegerField;
    DataSetFIO: TWideStringField;
    DataSetPHONE: TWideStringField;
    DataSetDEP_SEND: TWideStringField;
    DataSetART: TWideStringField;
    DataSetCOMP: TWideStringField;
    DataSetGOOD: TWideStringField;
    DataSetMAT: TWideStringField;
    DataSetSZ: TWideStringField;
    DataSetEMP_CREATE: TWideStringField;
    DataSetDATE_CREATE: TDateTimeField;
    DataSetDEP_CUSTOM: TWideStringField;
    DataSetNAME: TWideStringField;
    DataSetID_STATE: TIntegerField;
    DataSetTYPE_ORDER: TIntegerField;
    DataSetEMP_STATE: TWideStringField;
    DataSetDATE_STATE: TDateTimeField;
    DataSetNUMBER_DOC: TIntegerField;
    DataSetDATE_DOC: TWideStringField;
    DataSetCOMMENT: TWideStringField;
    DataSetPRICE: TFloatField;
    DataSource: TDataSource;
    DataSetSTATEID: TIntegerField;
    DataSetORDERID: TIntegerField;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure DataSetBeforeOpen(DataSet: TDataSet);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const RefreshSQL = 'select ' +
                     'IND_ORDER.ID_ORDER, ' +
                     'IND_ORDER.FIO, ' +
                     'IND_ORDER.PHONE, ' +
                     'IND_ORDER.DEP_SEND, ' +
                     'IND_ORDER.ART, ' +
                     'IND_ORDER.COMP, ' +
                     'IND_ORDER.GOOD, ' +
                     'IND_ORDER.MAT, ' +
                     'IND_ORDER.SZ, ' +
                     'IND_ORDER.EMP_CREATE, ' +
                     'IND_ORDER.DATE_CREATE, ' +
                     'IND_ORDER.DEP_CUSTOM, ' +
                     'IND_STATE.NAME, ' +
                     'IND_ORDER.ID_STATE, ' +
                     'IND_ORDER.TYPE_ORDER,' +
                     'ORDER_HISTORY.EMP_STATE, ' +
                     'ORDER_HISTORY.DATE_STATE, ' +
                     'ORDER_HISTORY.NUMBER_DOC, ' +
                     'ORDER_HISTORY.DATE_DOC, ' +
                     'ORDER_HISTORY.COMMENT, ' +
                     'ORDER_HISTORY.PRICE ' +
                   'from ' +
                     'IND_ORDER ' +
                     'left outer join IND_STATE on IND_ORDER.ID_STATE = IND_STATE.ID_STATE ' +
                     'left outer join ORDER_HISTORY on IND_ORDER.ID_ORDER = ORDER_HISTORY.ID_ORDER ' +
                   'where ' +
                     '( ' +
                        '(IND_ORDER.ID_ORDER = ?) and ' +
                        '((IND_ORDER.DEL  <> 1) or (IND_ORDER.DEL is NULL)) and ' +
                        '(ORDER_HISTORY.ID_STATE = IND_STATE.ID_STATE) and ' +
                        '(IND_ORDER.TYPE_ORDER = 1)  and ' +
                        '(IND_ORDER.id_state <> 11) ' +
                      ') ' +
                   'order by IND_ORDER.ID_ORDER desc;';

var
  frmMain: TfrmMain;

implementation

uses ADOInt;

{$R *.dfm}

procedure TfrmMain.Button1Click(Sender: TObject);
begin

  Connection.Connected := true;

end;

procedure TfrmMain.Button2Click(Sender: TObject);
begin

  DataSet.Open;

  DataSet.Properties['Unique Table'].Value := 'IND_ORDER';

  DataSet.Properties['Update Criteria'].Value := adCriteriaKey;

  DataSet.Properties['Resync Command'].Value := RefreshSQL;

  DataSet.Properties['Update Resync'].Value := adResyncAutoIncrement + adResyncInserts;



end;

procedure TfrmMain.Button3Click(Sender: TObject);
begin
  DataSet.UpdateBatch;
end;

procedure TfrmMain.Button4Click(Sender: TObject);
begin

    try
      DataSet.UpdateBatch;
    except
      DataSet.CancelBatch;
    end;
  

  DataSet.Close;

  if Connection.InTransaction then
  begin

    try

      Connection.CommitTrans;

    except

      on E: Exception do
      begin

        ShowMessage(E.Message);

        Connection.RollbackTrans;

      end;

    end;

  end;

  Connection.Close;

  Application.Terminate;
  
end;

procedure TfrmMain.DataSetBeforeOpen(DataSet: TDataSet);
begin

  (DataSet as TADODataSet).Parameters.ParamByName('$DEP').Value := 'Сити Молл';

end;

end.

И SQL-запрос из ADODataSet
+
select  
  IND_ORDER.ID_ORDER, 
  IND_ORDER.FIO, 
  IND_ORDER.PHONE,
  IND_ORDER.DEP_SEND, 
  IND_ORDER.ART, 
  IND_ORDER.COMP, 
  IND_ORDER.GOOD, 
  IND_ORDER.MAT, 
  IND_ORDER.SZ, 
  IND_ORDER.EMP_CREATE, 
  IND_ORDER.DATE_CREATE, 
  IND_ORDER.DEP_CUSTOM,

  IND_STATE.ID_STATE STATE$ID,
  IND_STATE.NAME,

  IND_ORDER.ID_STATE, 
  IND_ORDER.TYPE_ORDER,

  ORDER_HISTORY.ID_ORDER ORDER$ID,
  ORDER_HISTORY.EMP_STATE, 
  ORDER_HISTORY.DATE_STATE, 
  ORDER_HISTORY.NUMBER_DOC,
  ORDER_HISTORY.DATE_DOC, 
  ORDER_HISTORY.COMMENT, 
  ORDER_HISTORY.PRICE
from 
   IND_ORDER 
   left outer join IND_STATE on IND_ORDER.ID_STATE = IND_STATE.ID_STATE
   left outer join ORDER_HISTORY on IND_ORDER.ID_ORDER = ORDER_HISTORY.ID_ORDER
where
    ( 
      ((IND_ORDER.DEL  <> 1) or (IND_ORDER.DEL is NULL)) and 
      (IND_ORDER.DEP_CUSTOM=:$DEP) and 
      (ORDER_HISTORY.ID_STATE = IND_STATE.ID_STATE) and 
      (IND_ORDER.TYPE_ORDER=1)  and  
      (IND_ORDER.id_state<>11)
     )
order by IND_ORDER.ID_ORDER desc;

Ну и dfm-ку, конечно же
+
object frmMain: TfrmMain
  Left = 0
  Top = 0
  Caption = 'frmMain'
  ClientHeight = 417
  ClientWidth = 1183
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Grid: TDBGridEh
    Left = 0
    Top = 0
    Width = 1183
    Height = 360
    Align = alClient
    DataGrouping.GroupLevels = <>
    DataSource = DataSource
    Flat = True
    FooterColor = clWindow
    FooterFont.Charset = DEFAULT_CHARSET
    FooterFont.Color = clWindowText
    FooterFont.Height = -11
    FooterFont.Name = 'Tahoma'
    FooterFont.Style = []
    OptionsEh = [dghFixed3D, dghHighlightFocus, dghClearSelection, dghAutoSortMarking, dghMultiSortMarking, dghIncSearch, dghRowHighlight, dghDialogFind, dghColumnResize, dghColumnMove, dghExtendVertLines]
    RowDetailPanel.Color = clBtnFace
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    Columns = <
      item
        EditButtons = <>
        FieldName = 'ID_ORDER'
        Footers = <>
        Width = 61
      end
      item
        EditButtons = <>
        FieldName = 'NAME'
        Footers = <>
        Width = 73
      end
      item
        EditButtons = <>
        FieldName = 'FIO'
        Footers = <>
        Width = 99
      end
      item
        EditButtons = <>
        FieldName = 'PHONE'
        Footers = <>
        Width = 92
      end
      item
        EditButtons = <>
        FieldName = 'DEP_SEND'
        Footers = <>
        Width = 122
      end
      item
        EditButtons = <>
        FieldName = 'ART'
        Footers = <>
        Width = 93
      end
      item
        EditButtons = <>
        FieldName = 'COMP'
        Footers = <>
        Width = 116
      end
      item
        EditButtons = <>
        FieldName = 'GOOD'
        Footers = <>
        Width = 71
      end
      item
        EditButtons = <>
        FieldName = 'MAT'
        Footers = <>
        Width = 72
      end
      item
        EditButtons = <>
        FieldName = 'SZ'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'EMP_CREATE'
        Footers = <>
        Width = 91
      end
      item
        EditButtons = <>
        FieldName = 'DATE_CREATE'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'DEP_CUSTOM'
        Footers = <>
        Width = 74
      end
      item
        EditButtons = <>
        FieldName = 'ID_STATE'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'TYPE_ORDER'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'EMP_STATE'
        Footers = <>
        Width = 100
      end
      item
        EditButtons = <>
        FieldName = 'DATE_STATE'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'NUMBER_DOC'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'DATE_DOC'
        Footers = <>
      end
      item
        EditButtons = <>
        FieldName = 'COMMENT'
        Footers = <>
        Width = 73
      end
      item
        EditButtons = <>
        FieldName = 'PRICE'
        Footers = <>
      end>
    object RowDetailData: TRowDetailPanelControlEh
    end
  end
  object Panel1: TPanel
    Left = 0
    Top = 360
    Width = 1183
    Height = 57
    Align = alBottom
    TabOrder = 1
    object Button1: TButton
      Left = 808
      Top = 16
      Width = 75
      Height = 25
      Caption = 'DB Connect'
      TabOrder = 0
      OnClick = Button1Click
    end
    object Button2: TButton
      Left = 896
      Top = 16
      Width = 75
      Height = 25
      Caption = 'Open Data'
      TabOrder = 1
      OnClick = Button2Click
    end
    object Button3: TButton
      Left = 984
      Top = 16
      Width = 89
      Height = 25
      Caption = 'Save changes'
      TabOrder = 2
      OnClick = Button3Click
    end
    object Button4: TButton
      Left = 1088
      Top = 16
      Width = 75
      Height = 25
      Caption = 'Quit'
      TabOrder = 3
      OnClick = Button4Click
    end
  end
  object Connection: TADOConnection
    Connected = True
    ConnectionString = 
      'Provider=MSDASQL.1;Password=MyPasswordIsVeryLong;Persist Security Info=True;' +
      'User ID=order;Mode=ReadWrite;Extended Properties="DRIVER={MySQL ' +
      'ODBC 5.1 Driver};UID=order;PWD=MyPasswordIsVeryLong;SERVER=xxx.xxx.xxx.xxx;DA' +
      'TABASE=order;PORT=xxxxx;charset=cp1251;"'
    LoginPrompt = False
    Mode = cmReadWrite
    Left = 16
    Top = 8
  end
  object DataSet: TADODataSet
    Connection = Connection
    CursorType = ctStatic
    LockType = ltBatchOptimistic
    BeforeOpen = DataSetBeforeOpen
    BeforeClose = DataSetBeforeClose
    CommandText = 
      'select  '#13#10'  IND_ORDER.ID_ORDER, '#13#10'  IND_ORDER.FIO, '#13#10'  IND_ORDER' +
      '.PHONE,'#13#10'  IND_ORDER.DEP_SEND, '#13#10'  IND_ORDER.ART, '#13#10'  IND_ORDER.' +
      'COMP, '#13#10'  IND_ORDER.GOOD, '#13#10'  IND_ORDER.MAT, '#13#10'  IND_ORDER.SZ, '#13 +
      #10'  IND_ORDER.EMP_CREATE, '#13#10'  IND_ORDER.DATE_CREATE, '#13#10'  IND_ORDE' +
      'R.DEP_CUSTOM,'#13#10#13#10'  IND_STATE.ID_STATE STATE$ID,'#13#10'  IND_STATE.NAM' +
      'E,'#13#10#13#10'  IND_ORDER.ID_STATE, '#13#10'  IND_ORDER.TYPE_ORDER,'#13#10#13#10'  ORDER' +
      '_HISTORY.ID_ORDER ORDER$ID,'#13#10'  ORDER_HISTORY.EMP_STATE, '#13#10'  ORDE' +
      'R_HISTORY.DATE_STATE, '#13#10'  ORDER_HISTORY.NUMBER_DOC,'#13#10'  ORDER_HIS' +
      'TORY.DATE_DOC, '#13#10'  ORDER_HISTORY.COMMENT, '#13#10'  ORDER_HISTORY.PRIC' +
      'E'#13#10'from '#13#10'   IND_ORDER '#13#10'   left outer join IND_STATE on IND_ORD' +
      'ER.ID_STATE = IND_STATE.ID_STATE'#13#10'   left outer join ORDER_HISTO' +
      'RY on IND_ORDER.ID_ORDER = ORDER_HISTORY.ID_ORDER'#13#10'where'#13#10'    ( ' +
      #13#10'      ((IND_ORDER.DEL  <> 1) or (IND_ORDER.DEL is NULL)) and '#13 +
      #10'      (IND_ORDER.DEP_CUSTOM=:$DEP) and '#13#10'      (ORDER_HISTORY.I' +
      'D_STATE = IND_STATE.ID_STATE) and '#13#10'      (IND_ORDER.TYPE_ORDER=' +
      '1)  and  '#13#10'      (IND_ORDER.id_state<>11)'#13#10'     )'#13#10'order by IND_' +
      'ORDER.ID_ORDER desc;'
    IndexFieldNames = 'ID_ORDER;'
    Parameters = <
      item
        Name = '$DEP'
        Attributes = [paNullable]
        DataType = ftString
        Precision = 255
        Size = 255
        Value = Null
      end>
    Left = 16
    Top = 48
    object DataSetID_ORDER: TIntegerField
      FieldName = 'ID_ORDER'
      ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
    end
    object DataSetFIO: TWideStringField
      FieldName = 'FIO'
      ProviderFlags = []
      Size = 60
    end
    object DataSetPHONE: TWideStringField
      FieldName = 'PHONE'
      ProviderFlags = []
      Size = 30
    end
    object DataSetDEP_SEND: TWideStringField
      FieldName = 'DEP_SEND'
      ProviderFlags = []
      Size = 30
    end
    object DataSetART: TWideStringField
      FieldName = 'ART'
      ProviderFlags = []
      Size = 60
    end
    object DataSetCOMP: TWideStringField
      FieldName = 'COMP'
      ProviderFlags = []
      Size = 60
    end
    object DataSetGOOD: TWideStringField
      FieldName = 'GOOD'
      ProviderFlags = []
      Size = 60
    end
    object DataSetMAT: TWideStringField
      FieldName = 'MAT'
      ProviderFlags = []
      Size = 30
    end
    object DataSetSZ: TWideStringField
      FieldName = 'SZ'
      ProviderFlags = []
      Size = 10
    end
    object DataSetEMP_CREATE: TWideStringField
      FieldName = 'EMP_CREATE'
      ProviderFlags = []
      Size = 40
    end
    object DataSetDATE_CREATE: TDateTimeField
      FieldName = 'DATE_CREATE'
      ProviderFlags = []
    end
    object DataSetDEP_CUSTOM: TWideStringField
      FieldName = 'DEP_CUSTOM'
      ProviderFlags = []
      Size = 30
    end
    object DataSetNAME: TWideStringField
      FieldName = 'NAME'
      ProviderFlags = []
      Size = 60
    end
    object DataSetID_STATE: TIntegerField
      FieldName = 'ID_STATE'
      ProviderFlags = []
    end
    object DataSetTYPE_ORDER: TIntegerField
      FieldName = 'TYPE_ORDER'
      ProviderFlags = []
    end
    object DataSetEMP_STATE: TWideStringField
      FieldName = 'EMP_STATE'
      ProviderFlags = []
      Size = 40
    end
    object DataSetDATE_STATE: TDateTimeField
      FieldName = 'DATE_STATE'
      ProviderFlags = []
    end
    object DataSetNUMBER_DOC: TIntegerField
      FieldName = 'NUMBER_DOC'
      ProviderFlags = []
    end
    object DataSetDATE_DOC: TWideStringField
      FieldName = 'DATE_DOC'
      ProviderFlags = []
      Size = 10
    end
    object DataSetCOMMENT: TWideStringField
      FieldName = 'COMMENT'
      ProviderFlags = []
      Size = 200
    end
    object DataSetPRICE: TFloatField
      FieldName = 'PRICE'
      ProviderFlags = []
    end
    object DataSetSTATEID: TIntegerField
      FieldName = 'STATE$ID'
      ProviderFlags = []
    end
    object DataSetORDERID: TIntegerField
      FieldName = 'ORDER$ID'
      ProviderFlags = []
    end
  end
  object DataSource: TDataSource
    DataSet = DataSet
    Left = 56
    Top = 48
  end
end
Вопрос: MySQL как получить identity (auto_increment)

Всем доброго дня,

Пришлось писать приложение на PB (10.5) для MySQL (5.6) ..
и столкнулся с неожиданной проблемой - не могу получить значение @@identity
после insert-a ... без использования Datawindow.
Пытался через dynamic sql (prepare from sqlsa ... execute immediate ..)
Сделал проц-ру ... чтото вроде :
create procedure usp_add_media(
in aobject_title varchar(255),
out aobject_id int
)
begin
insert into media(object_title)
values (aobject_title);
set aobject_id = last_insert_id();
end;

В PB описал ее как local external functions
subroutine usp_add_media(string pmedia_title, ref int pmedia_id) RPCFUNC ALIAS FOR "usp_add_media"

вызываю SQLCA.usp_add_media("fgdjhfdsf", li_id)
получаю 0!!!

где я не прав??
Ответ: _Drive_,
Нашел!! на

Надо править PBODB105.ini

добавить секцию ...
[MySQL]
PBSyntax='MySQL_SYNTAX'

to the Syntax Section:
[MySQL_SYNTAX]
GetIdentity='Select @@identity'

После этого Datawindow identity column - ЗАРАБОТАЛО!
Вопрос: Создание курсора mysql

Не знаю в чем ошибка, но пхпадмин вот как ругается

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

SQL
1
2
3
4
5
DROP FUNCTION IF EXISTS exceptionModules;
CREATE PROCEDURE exceptionModules();
BEGIN 
        DECLARE email_cursor CURSOR FOR SELECT code FROM `oc_extension`;
END
Что не так?
Ответ: ↓↓↓
Я перенес вашу тему в раздел Mysql.
Вопрос: Ошибка 1064 в Mysql

Подскажите пожалуйста,делаю такой запрос.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
CREATE TABLE weeki.users (
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(255) NOT NULL,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(255) NOT NULL,
  password VARCHAR(255) NOT NULL,
  registration_id TEXT DEFAULT NULL,
  api TEXT NOT NULL,
  created_At DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  disabled TINYINT(1) DEFAULT 0,
  STATUS VARCHAR(130) DEFAULT 'Just another user',
  icon TEXT DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX id (id)
);
 
CREATE TABLE weeki.groups (
  group_id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  icon TEXT DEFAULT NULL,
  description VARCHAR(130) NOT NULL,
  creation DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (group_id)
);
 
CREATE TABLE weeki.messages (
  message_id INT(11) NOT NULL AUTO_INCREMENT,
  receiver_id INT(11) NOT NULL,
  sender_id INT(11) NOT NULL,
  msg_type INT(11) NOT NULL DEFAULT 0,
  message VARCHAR(255) NOT NULL,
  created_At DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (message_id),
  UNIQUE INDEX id (message_id),
  CONSTRAINT FK_messages_users_id FOREIGN KEY (receiver_id)
    REFERENCES weeki.users(id) ON DELETE RESTRICT ON UPDATE RESTRICT
);
 
CREATE TABLE weeki.messages_receipt (
  message_id INT(11) NOT NULL,
  user_id INT(11) NOT NULL,
  is_delivered INT(11) NOT NULL DEFAULT 0,
  CONSTRAINT FK_messages_receipt_messages_id FOREIGN KEY (message_id)
    REFERENCES weeki.messages(message_id) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT FK_messages_receipt_users_id FOREIGN KEY (user_id)
    REFERENCES weeki.users(id) ON DELETE RESTRICT ON UPDATE RESTRICT
);
 
CREATE TABLE weeki.group_messages (
  message_id INT(11) NOT NULL AUTO_INCREMENT,
  group_id INT(11) NOT NULL,
  user_id INT(11) NOT NULL,
  msg_type INT(11) NOT NULL DEFAULT 0,
  message VARCHAR(255) NOT NULL,
  created_at TIMESTAMP NOT NULL,
  PRIMARY KEY (message_id),
  CONSTRAINT FK_group_messages_groups_group_id FOREIGN KEY (group_id)
    REFERENCES weeki.groups(group_id) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT FK_group_messages_users_id FOREIGN KEY (user_id)
    REFERENCES weeki.users(id) ON DELETE RESTRICT ON UPDATE RESTRICT
);
 
CREATE TABLE weeki.group_members (
  group_id INT(11) DEFAULT NULL,
  user_id INT(11) DEFAULT NULL,
  CONSTRAINT FK_group_members_groups_group_id FOREIGN KEY (group_id)
    REFERENCES weeki.groups(group_id) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT FK_group_members_users_id FOREIGN KEY (user_id)
    REFERENCES weeki.users(id) ON DELETE RESTRICT ON UPDATE RESTRICT
);
 
CREATE TABLE weeki.group_receipt (
  message_id INT(11) NOT NULL,
  user_id INT(11) NOT NULL,
  is_delivered INT(11) NOT NULL DEFAULT 0,
  INDEX FK_group_stats_groups_group_id (user_id),
  CONSTRAINT FK_group_stats_group_messages_message_id FOREIGN KEY (message_id)
    REFERENCES weeki.group_messages(message_id) ON DELETE RESTRICT ON UPDATE RESTRICT
);
 
CREATE FUNCTION weeki.CreateGroup(GroupName VARCHAR(50), GroupIcon TEXT, GroupDescription VARCHAR(130), GroupCreator INT)
  RETURNS INT(11)
  DETERMINISTIC
BEGIN
  DECLARE groupID INT;
  INSERT INTO groups (name, icon, description) VALUES (GroupName, GroupIcon, GroupDescription);
  SET groupID = LAST_INSERT_ID();
  INSERT INTO group_members VALUES (groupID, GroupCreator);
  RETURN groupID;
END;
 
CREATE FUNCTION weeki.AddMessage(r VARCHAR(255), s INT, t INT, m VARCHAR(255), creation DATETIME)
  RETURNS INT(11)
  DETERMINISTIC
BEGIN
        DECLARE lastID INT;
        DECLARE receiver INT;
        SELECT id INTO receiver FROM users WHERE username=r;
        INSERT INTO messages (receiver_id, sender_id, msg_type, message, created_At) VALUES(receiver, s, t, m, creation);
        SET lastID = LAST_INSERT_ID();
        INSERT INTO messages_receipt (message_id, user_id, is_delivered) VALUES (lastID, receiver, 0);
        RETURN lastID;
END;
 
CREATE FUNCTION weeki.AddGroupMessage(gid INT, s INT, t INT, m VARCHAR(255), creation DATETIME)
  RETURNS INT(11)
  DETERMINISTIC
BEGIN
  DECLARE lastID INT; DECLARE rowCount INT;
  SELECT COUNT(*) INTO rowCount FROM group_members WHERE user_id = s AND group_id = gid;
  IF rowCount = 1 THEN
  INSERT INTO group_messages (group_id, user_id, msg_type, message, created_at) VALUES (gid, s, t, m, creation);
  SET lastID = LAST_INSERT_ID();
  INSERT INTO group_receipt (message_id, user_id, is_delivered) SELECT gm.message_id, gmembers.user_id, 0 FROM
  group_messages gm LEFT JOIN group_members gmembers ON gmembers.group_id = gm.group_id WHERE gm.group_id = gid AND gm.message_id = lastID AND NOT gmembers.user_id = s;
  RETURN lastID;
  ELSE
    RETURN 0;
  END IF;
END;
 
CREATE DEFINER = 'root'@'localhost'
FUNCTION weeki.AddGroupMember(GroupID INT, MemberName VARCHAR(255), Username INT)
  RETURNS INT(11)
BEGIN
  INSERT INTO group_members VALUES (GroupID, MemberName);
  RETURN 1;
END;
И получаю в конце такие ошибки
Код
SQL запрос:


CREATE FUNCTION weeki.CreateGroup(GroupName VARCHAR(50), GroupIcon TEXT, GroupDescription VARCHAR(130), GroupCreator INT)
  RETURNS int(11)
  DETERMINISTIC
BEGIN
  DECLARE groupID INT;
Ответ MySQL: Документация

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
Ответ:
По умолчанию ; разделяет команды. Если же нужно выполнить набор из нескольких инструкций как одну команду (например, при создании процедур, фунуций, триггеров), то необходимо переопределить разделитель с помощью DELIMITER, иначе интерпретация команды остановится на первой ; и будет ошибка синтаксиса. Пример:
delimiter //
create procedure test()
begin
set @a=1;
select @a;
end//
Вопрос: Не удаётся связка MySQL + PHP

Установил связку php+apache+mysql. apache+php удалось завести, а вот mysql - нет :(
Точнее, сам по себе mysql работает, но не удаётся завести его скриптом из php в localhost... Выдаёт в браузере такую ошибку: "Страница localhost не работает
Сайт localhost пока не может обработать этот запрос.
500"

Содержимое скрипта такое:
<?php
$dblocation= "127.0.0.1";
$dbname = "test";
$dbuser = "root";
$dbpasswd = ""; /* Здесь укажите пароль, который вы вво-дили при установке MySQL */
$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx){
echo "Не доступен сервер mySQL";
exit();
}
else { echo “Доступен сервер MySQL”;}
echo “<br><br>”;
if (!@mysql_select_db($dbname,$dbcnx)){
echo "База данных test недоступна.";
exit();
}
else { echo “База данных test доступна.;}
echo “<br><br>”;

$ver = mysql_query("SELECT VERSION()");
if(!$ver){
echo "Ошибка в запросе"; 
exit();
}
echo “Версия MySQL:;
echo mysql_result($ver, 0);
?>


В файл php.ini добавлял следующее:
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_sqlite.dll



В чем может быть проблема?
Ответ: Akina,

В общем, вы были правы. Отключил подавление ошибок, а так же скопировал файл libmysql из каталога php в system32 и теперь проблема исчезла, скрипт работает и выводит версию MySQL.


Тему можно закрывать:)
Вопрос: Как указать путь для подключения к БД MySQL?

Подключаюсь из java к MySQL

    private static final String url = "jdbc:mysql://localhost:8888";
    private static final String user = "user";
    private static final String password = "password";

    connect = DriverManager.getConnection(url, user, password);


и не подключаюсь, и ошибок не выдает.
При этом, при подключении через Terminal - подключаюсь! Но в начале каждой сессии приходится прописывать путь к MySQL

 export PATH=$PATH:/Applications/MAMP/Library/bin


Может, кто подскажет как этот путь указать в jav'e?


Дравер mysql-connector-java-5.1.39-bin.jar установлен
Ответ:
rema174
mad_nazgul,

пул юзай. ни у кого не сбрасывает соединение, а у тебя сбрасывает и значит mysql плохой... - нелогично


Как раз при использовании пула проблема.
Насчет ни у кого, это не верно.
Недельное гугление показало, что проблема есть у всех.
Решается "пингом" соединения MySQL :-)
Вопрос: Новый драйвер mysql 6

Добрый день

Проект Мавен

после обновления в логах вижу



Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Exception in thread "main" java.sql.SQLException: The server time zone value 'MSK' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	


собственно `com.mysql.jdbc.Driver'. - финиш?


что там нового то ? в `com.mysql.cj.jdbc.Driver' ?

и как жить дальше?

Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'MSK' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	
Ответ:
Atum1
ааа кажись понял



наконец то депрекейинули этот подход...

просто в инете 100500 примеров когда нужно указывать `com.mysql.jdbc.Driver'.

а есть пример с новым способом?
Вопрос: скрипт для mysql при соединении к базе

Есть такое подключение к базе MySQL

Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/aaa", "root", "");


Как сделать, чтобы при подключении выполнился еще запрос к базе (для добавления таблицы), который нужно взять в проекте в ресурсах /src/main/resources/create.sql по относительному пути проекта ?
Ответ:
goldenhawk
Как сделать, чтобы при подключении выполнился еще запрос к базе


Никак, если не знать основ JDBC и SQL. Запрос выполняется не при подключении, а после. Запрос состоит не в выполнении скрипта,а в выполнении оператора, записанного в файле. Значит, вам надо прочитать файл. Очевидно, там есть SQL оператор CREATE TABLE. Но может быть, там последовательность операторов. Надо посмотреть. Если последовательность, то тоже можно будет выполнить, но несколько иначе, чем один. Как выполнить один оператор - нашёлся пример, даже для MySQL:



От вашего случая пример отличается тем, что в нём SQL-оператор задаётся в строке в программе, а не вводится из файла. Значит, вам надо осилить чтение файла для получения этой строки.