Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 11:36   #1
tim21701
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 67
Вопрос Как сделать запрос к MySQL не зная префикс таблиц?

Во время соединения запрашиваю префикс таблиц и сохраняю их в ini файле.
Далее строю такой запрос: (таблица order)

Код:
SELECT CONCAT(LEFT(`firstname`,1),'.', `lastname`) 
AS `username`,
`total`,
DATE_FORMAT(`date_added`, '%d.%m.%Y') 
AS `date` 
FROM `order` 
ORDER BY `date_added` 
DESC LIMIT 10
Как подставить префикс таблицы?

Последний раз редактировалось tim21701; 28.01.2012 в 11:44.
tim21701 вне форума Ответить с цитированием
Старый 28.01.2012, 12:09   #2
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Что такое
Цитата:
префикс таблиц и сохраняю их в ini файле
Что в вашем понимании префикс?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 28.01.2012, 12:38   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

1.
Цитата:
(таблица order)
Это кто придумал называть таблицу зарезервированным словом?
2. А в чем проблема?
Читаем префикс из ини-файла, что-то типа
Код:
PREFIX:=IniFile.ReadString('OPTIONS','PREFIX','');
и далее в запросе
Код:
select .... from ' + PREFIX + 'order ...' и т.д.
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2012, 12:41   #4
tim21701
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от rdama Посмотреть сообщение
Что такое
Что в вашем понимании префикс?
Это не в моём понимании префикс... ))))))))))



Во время установки php скрипт предлагается указать "префикс" таблиц...
Например, если прописать "12345_" то таблица order будет в базе как "12345_order". (как и все остальные)

Последний раз редактировалось tim21701; 28.01.2012 в 12:44.
tim21701 вне форума Ответить с цитированием
Старый 28.01.2012, 12:45   #5
tim21701
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от _SERGEYX_
Это кто придумал называть таблицу зарезервированным словом?
Так я поэтому в кавычки их и беру... ))))

Цитата:
Сообщение от _SERGEYX_
...Читаем префикс из ини-файла, что-то типа
Код:
PREFIX:=IniFile.ReadString('OPTIONS','PREFIX','');
и далее в запросе
Код:
select .... from ' + PREFIX + 'order ...' и т.д.
Ок, сейчас попробую....

С ini файлом разобрался, всё сохраняет и подгружает. Подключается к базе и выполняется запрос (стандартный) а вот как подставить "префикс таблицы" в запрос - что то не получается...
Помогите кто знает.

Неужели никто не поможет???

Делаю вот так:
Код:
var
  Form2: TForm2;
  iniFile: TiniFile;

implementation

{$R *.dfm}

uses Unit1;

procedure TForm2.FormCreate(Sender: TObject);
begin
  inifile:=TiniFile.Create(GetCurrentDir + '\setting.ini');
  Edit1.Text:=inifile.ReadString('Connect','username','');
  Edit2.Text:=inifile.ReadString('Connect','password','');
  Edit3.Text:=inifile.ReadString('Connect','server','');
  Edit4.Text:=inifile.ReadString('Connect','port','');
  Edit5.Text:=inifile.ReadString('Connect','database','');
  Edit6.Text:=inifile.ReadString('Connect','prefix','');
  inifile.Free;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  inifile:=TiniFile.Create(GetCurrentDir + '\setting.ini');
  inifile.WriteString('Connect','username',Edit1.Text);
  inifile.WriteString('Connect','password',Edit2.Text);
  inifile.WriteString('Connect','server',Edit3.Text);
  inifile.WriteString('Connect','port',Edit4.Text);
  inifile.WriteString('Connect','database',Edit5.Text);
  inifile.WriteString('Connect','prefix',Edit6.Text);
  inifile.Free;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
      MyConnection1.Username:=Edit1.Text;
      MyConnection1.Password:=Edit2.Text;
      MyConnection1.Server:=Edit3.Text;
      MyConnection1.Database:=Edit5.Text;
      MyConnection1.Connected:=True;

if MyConnection1.Connected = True then
  begin
      Edit6.Text:=inifile.ReadString('Connect','prefix',''); //вроде так???
      Form1.MyQuery1.Connection:=Form2.MyConnection1;
      Form1.MyQuery1.Active:=False;
      Form1.MyQuery1.SQL.clear;                              
  Form1.MyQuery1.SQL.add('SELECT `lastname`, `total`, `date_added` FROM ' + Edit6.Text + '`order` ORDER BY `date_added` DESC LIMIT 10');
      Form1.MyQuery1.Active := true;                          
      Form2.Close;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  Form2.Close;
end;
end.
Если префикс не указал - всё подключается...
Подскажите, как сделать правильно???
Изображения
Тип файла: png Image 7.png (15.1 Кб, 110 просмотров)
Вложения
Тип файла: zip Project1.zip (81.6 Кб, 8 просмотров)

Последний раз редактировалось Stilet; 29.01.2012 в 11:04.
tim21701 вне форума Ответить с цитированием
Старый 29.01.2012, 06:32   #6
tim21701
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 67
Восклицание

Пробую по другому:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
   Prefix: string;
begin
if MyConnection1.Connected = True then
  begin
    Prefix:=IniFile.ReadString('Connection','Prefix','');
    
    MyQuery1.Active:=False;
    MyQuery1.SQL.clear;
	
    MyQuery1.SQL.add ('SELECT CONCAT(LEFT(`firstname`,1),''.'', `lastname`) AS `username`, `total`, DATE_FORMAT(`date_added`, ''%d.%m.%Y'') AS `date` FROM `'' + Prefix + ''order` ORDER BY `username` DESC LIMIT 10');
	
    MyQuery1.Active := true;
  end;
end;
Всё равно получаю ошибку:

Не понимает он что такое + Prefix +
Где ошибка??? Может Я не правильно что то делаю???
tim21701 вне форума Ответить с цитированием
Старый 29.01.2012, 07:44   #7
tim21701
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 67
Радость

Всё, разобрался сам... Вот как сделал:
Код:
var
Prefix: string; //указал строку
begin
...
...
Prefix:=Edit6.Text; //и откуда её берём
...
MyQuery1.SQL.add('SELECT `lastname`, `total`, `date_added` FROM `' + Prefix + 'order` ORDER BY `date_added` DESC LIMIT 10');
...
В запросе неправильно скобки указал:
' + Prefix + '`order` //было так
`' + Prefix + 'order` //сделал так

Теперь всё работает замечательно... Но, появилась другая проблема:
Такой запрос проходит:
Код:
('SELECT `lastname`, `total`, `date_added` FROM `' + Prefix + 'order` ORDER BY `date_added` DESC LIMIT 10');
А такой почему то нет:
Код:
('SELECT CONCAT(LEFT(`firstname`,1),''.'', `lastname`) AS `username`, `total`, DATE_FORMAT(`date_added`, ''%d.%m.%Y'') AS `date` FROM `' 
+ Prefix + 'order` ORDER BY `username` DESC LIMIT 10');
Пишет, якобы `lastname` не найден! С какого перепугу - не понятно...



В чем причина?

Последний раз редактировалось tim21701; 29.01.2012 в 13:00.
tim21701 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать запрос к MySQL не зная имени Базы? tim21701 БД в Delphi 4 22.01.2012 20:58
Как работает префикс функция ? videolord Общие вопросы по Java, Java SE, Kotlin 4 15.04.2011 17:17
Как правилно составить запрос из несколких таблиц или запросов Rebbit Microsoft Office Access 1 25.07.2010 18:49
MySQl+PHP5 как сделать запрос на вывод текста в ближайшие 5 дней xxxsas SQL, базы данных 2 10.05.2009 14:04
Как оптимизировать запрос MySQL с выборкой из двух таблиц. Johnatan SQL, базы данных 6 13.04.2008 03:10