Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1302032335
IPranker
2011-04-05 23:38
2011.07.24
Чем отличаются Дельфийские дженерики от C++ шаблонов?


8-1214048535
Al
2008-06-21 15:42
2011.07.24
Как сделать в функции динамическую переменную?


2-1302852892
OlegM
2011-04-15 11:34
2011.07.24
Как не дать запустить моё приложение из другова приложения ?


15-1302406131
TUser
2011-04-10 07:28
2011.07.24
А на чем мозилла деньги делает?


15-1302110786
Inovet
2011-04-06 21:26
2011.07.24
DMClient &amp; IE9





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский