Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
ВнизПодключить внешний файл как строковое значение переменной Найти похожие ветки
← →
Kirill © (2011-04-17 09:05) [0]Добрый день, подскажие, как проще реализовать сабж?
Задача: есть файл updatedb.inc. Хочу все содержимое его (каждая строка, для удобства, отдельный запрос к базе).
Необходимо все это на этапе компиляции задать как значение константе или переменной.
← →
Anatoly Podgoretsky © (2011-04-17 10:03) [1]Чего?
← →
oldman © (2011-04-17 10:09) [2]
> на этапе компиляции
чего-чего?
← →
CrytoGen (2011-04-17 12:35) [3]из близкого только в ресурсы
← →
sniknik © (2011-04-17 13:12) [4]на D7 это нифига не проще, их еще компилировать до включения придется... копипаст содержимого куда нибудь в CommandText/Text компонента куда проще.
← →
CrytoGen (2011-04-17 13:22) [5]На D7 нужно просто тупо создать файл со списком подключаемых файлов и добавить его в проект. Ничего компилировать не нужно.
← →
sniknik © (2011-04-17 14:16) [6]ну попробуй, выполни включение без компиляции, изменив внешний файл... а после сделай билд, чтобы ресурс гарантированно перекомпилился.
← →
Andy BitOff © (2011-04-17 14:59) [7]А почему не сделать так
unit blablabla;
interface
const
bla1: "somestring1";
bla2: "somestring2";
bla3: "somestring3";
bla4: "somestring4";
← →
Andy BitOff © (2011-04-17 15:00) [8]или я чего-то не понял?
← →
sniknik © (2011-04-17 16:25) [9]> или я чего-то не понял?
у него файл скрип из запросов для обновления базы, откуда получает неважно, может генератор какой использует, т.е. там тогда где то еще должно быть что то вроде, -
ADOCommand.CommandText:= bla1;
ADOCommand.Execute;
ADOCommand.CommandText:= bla2;
ADOCommand.Execute;
и т.д.
а он хочет это все разом, типа получил файл положил рядом, скомпилировал программу, готово.
список запросов, п принципе можно и пакетом, и вроде бы тут тот самый случай (он в вопросе не разделяет, не говорит, что нужно разделять на команды), и можно брать весь файл на исполнение, но он не хочет чтобы файл лежал рядом с готовой программой, хочет включить внутрь... ресурсы подходят, там 5 строк кода извлечь и выполнить, но тогда нужно следить за актуальностью включенного... за измененными внешними файлами D7 не следит, только за изменением самого ресурсного файла... в общем. ИМХО, проще все таки в дизайне, в отдельный компонент ADOCommand в редакторе CommandText переносить да и все...
p.s. не говорю, что другие варианты сложные (как тут многие слово "проще" понимают), но 1 строчка кода (только выполнить уже вложенное), и ненужность слежения за чем то, проще, чем такая необходимость и 5 строк кода...
← →
KSergey © (2011-04-18 14:41) [10]> Подключить внешний файл как строковое значение переменной
В принципе - возможно.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 они отсутствуют)
← →
_Юрий (2011-04-19 18:58) [11]
> 1) длина константных строк в дельфи ограничена 255 символов,
> это надо учитывать
Не ограничена.
> Edit3.Text :=
> {$INCLUDE a.inc}
> ;
Не вижу никаких проблем.
← →
Kirill © (2011-04-19 23:00) [12]Всем большое спасибо и за подсказки. Сделал так:
fFullSQLUpdate :=
{$I updatedb.inc};
← →
antonn © (2011-04-20 14:20) [13]
> у него файл скрип из запросов для обновления базы, откуда
> получает неважно, может генератор какой использует, т.е.
> там тогда где то еще должно быть что то вроде, -
> ADOCommand.CommandText:= bla1;
> ADOCommand.Execute;
> ADOCommand.CommandText:= bla2;
> ADOCommand.Execute;
а мне показалось там что то типа такого в файле:select * from table
← →
KSergey © (2011-04-20 14:20) [14]> _Юрий (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;
← →
Германн © (2011-04-20 15:45) [15]
> KSergey © (20.04.11 14:20) [14]
>
> > _Юрий (19.04.11 18:58) [11]
> > Не ограничена.
>
> За все версии дельфи говорить не буду, может в самых свежих
> что и изменилось.
Термин "литерал" вам известен?
← →
_Юрий (2011-04-20 19:13) [16]
> 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<>?";
← →
Anatoly Podgoretsky © (2011-04-20 20:40) [17]Продолжай. И укажи где здесь константа и где литерал
← →
_Юрий (2011-04-20 21:43) [18]Где здесь константа - написано. А где литералы - понятно.
Должно быть наверно
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c