![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключить внешний файл как строковое значение переменной [D7, WinXP]
Kirill © (2011-04-17 09:05:00)Добрый день, подскажие, как проще реализовать сабж?
Задача: есть файл updatedb.inc. Хочу все содержимое его (каждая строка, для удобства, отдельный запрос к базе).
Необходимо все это на этапе компиляции задать как значение константе или переменной.
_Юрий (2011-04-20 21:43:00) [1]Где здесь константа - написано. А где литералы - понятно.
Должно быть наверно
Anatoly Podgoretsky (2011-04-20 20:40:00) [2]Продолжай. И укажи где здесь константа и где литерал
_Юрий (2011-04-20 19:13:00) [3]
> KSergey © (20.04.11 14:20) [14]
Ага. Длина литерала ограничена, длина константы - нет.
const s = '1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM <>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVB ' + 'NM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZ XC VBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?';
Германн (2011-04-20 15:45:00) [4]
> KSergey © (20.04.11 14:20) [14]
>
> > _Юрий (19.04.11 18:58) [11]
> > Не ограничена.
>
> За все версии дельфи говорить не буду, может в самых свежих
> что и изменилось.
Термин "литерал" вам известен?
KSergey (2011-04-20 14:20:00) [5]> _Юрий (19.04.11 18:58) [11]
> Не ограничена.
За все версии дельфи говорить не буду, может в самых свежих что и изменилось.
Скомпилируйте такой код, пожалуйста:
procedure TForm1.Button13Click(Sender: TObject);
var
s: STring;
begin
s := '1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM <>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVB NM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXC VBNM<>?1234567890QWERTYUIOP{}LKJHGFDSAZXCVBNM<>?';
end;
antonn (2011-04-20 14:20:00) [6]
> у него файл скрип из запросов для обновления базы, откуда
> получает неважно, может генератор какой использует, т.е.
> там тогда где то еще должно быть что то вроде, -
> ADOCommand.CommandText:= bla1;
> ADOCommand.Execute;
> ADOCommand.CommandText:= bla2;
> ADOCommand.Execute;
а мне показалось там что то типа такого в файле:
select * from table
Kirill (2011-04-19 23:00:00) [7]Всем большое спасибо и за подсказки. Сделал так:
fFullSQLUpdate :=
{$I updatedb.inc};
_Юрий (2011-04-19 18:58:00) [8]
> 1) длина константных строк в дельфи ограничена 255 символов,
> это надо учитывать
Не ограничена.
> Edit3.Text :=
> {$INCLUDE a.inc}
> ;
Не вижу никаких проблем.
KSergey (2011-04-18 14:41:00) [9]> Подключить внешний файл как строковое значение переменной
В принципе - возможно.
procedure TForm1.Button12Click(Sender: TObject);
begin
Edit3.Text :=
{$INCLUDE a.inc}
;
end;
Файл a.inc содержит:
'text from file'
Но:
1) длина константных строк в дельфи ограничена 255 символов, это надо учитывать
2) всего 1 строка, причем ее в подключаемом файле надо взять в апострофы.
Можно, конечно, просто в паскаль-синтаксисе оформлять подключаемый файл, на сколько удобно это - вопрос.
Можно еще на Build Before Step настроить конвертирование просто файла с набором строк в нужный синтаксис любой подручной (или самописанной) утилитой.
(Build Before Step - эдесь это опции среды сборки, позволяющие выполнять команды ОС при билде проекта (до собственно билда, в данном случае). Правда, в Д7 они отсутствуют)
sniknik (2011-04-17 16:25:00) [10]> или я чего-то не понял?
у него файл скрип из запросов для обновления базы, откуда получает неважно, может генератор какой использует, т.е. там тогда где то еще должно быть что то вроде, -
ADOCommand.CommandText:= bla1;
ADOCommand.Execute;
ADOCommand.CommandText:= bla2;
ADOCommand.Execute;
и т.д.
а он хочет это все разом, типа получил файл положил рядом, скомпилировал программу, готово.
список запросов, п принципе можно и пакетом, и вроде бы тут тот самый случай (он в вопросе не разделяет, не говорит, что нужно разделять на команды), и можно брать весь файл на исполнение, но он не хочет чтобы файл лежал рядом с готовой программой, хочет включить внутрь... ресурсы подходят, там 5 строк кода извлечь и выполнить, но тогда нужно следить за актуальностью включенного... за измененными внешними файлами D7 не следит, только за изменением самого ресурсного файла... в общем. ИМХО, проще все таки в дизайне, в отдельный компонент ADOCommand в редакторе CommandText переносить да и все...
p.s. не говорю, что другие варианты сложные (как тут многие слово "проще" понимают), но 1 строчка кода (только выполнить уже вложенное), и ненужность слежения за чем то, проще, чем такая необходимость и 5 строк кода...
Andy BitOff (2011-04-17 15:00:00) [11]или я чего-то не понял?
Andy BitOff (2011-04-17 14:59:00) [12]А почему не сделать так
unit blablabla;
interface
const
bla1: 'somestring1';
bla2: 'somestring2';
bla3: 'somestring3';
bla4: 'somestring4';
sniknik (2011-04-17 14:16:00) [13]ну попробуй, выполни включение без компиляции, изменив внешнийфайл... а после сделай билд, чтобы ресурс гарантированно перекомпилился.
CrytoGen (2011-04-17 13:22:00) [14]На D7 нужно просто тупо создать файл со списком подключаемых файлов и добавить его в проект. Ничего компилировать не нужно.
sniknik (2011-04-17 13:12:00) [15]на D7 это нифига не проще, их еще компилировать до включения придется... копипаст содержимого куда нибудь в CommandText/Text компонента куда проще.
CrytoGen (2011-04-17 12:35:00) [16]из близкого только в ресурсы
oldman (2011-04-17 10:09:00) [17]
> на этапе компиляции
чего-чего?
Anatoly Podgoretsky (2011-04-17 10:03:00) [18]Чего?