Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подключить внешний файл как строковое значение переменной [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]

Чего?


Наверх

Титульная страница Поиск, карта сайта Написать письмо