Можно ли показать содержимое текстового файла в Crystal Reports - PullRequest
5 голосов
/ 22 июня 2009

У меня есть отчет Crystal, который содержит список абсолютно ссылочных текстовых файлов. В каждой строке тела есть один текстовый файл.

например.

line1    c:\file1.txt
line2    c:\file2.txt

Есть ли способ отобразить содержимое этих файлов в Crystal?

т.е. Я хотел бы, чтобы каждая строка тела кристалла показывала текст из ссылочного текстового файла.

Я использую Crystal Reports 11 с нестандартным соединителем базы данных (dataflex).

Ответы [ 5 ]

4 голосов
/ 26 июня 2009

Вам потребуется настроить файл dsn (в XP он находится в Панели управления / Администрирование / Источники данных (ODBC)), а затем использовать файл dsn (Microsoft Text Driver) для источника данных в качестве соединения ODBC (RDO).

Я настроил этот тестовый сценарий на мой, как показано ниже:

**File 1**
column1
1row1
1row2
1row3

**File 2**
column1
2row1
2row2
2row3

Я настроил файл dsn, чтобы он указывал на диск c, и на экране источника данных я добавил file1.txt и file2.txt в выбранные таблицы. Тогда самое простое, что нужно сделать, это очистить ссылки таблиц, чтобы они вытягивали каждую строку. Он предупредит вас о наличии нескольких отправных точек. Я обычно не рекомендую это, но это будет работать в этом случае, и, поскольку он не передает данные из базы данных, это, вероятно, не конец света. Если вы игнорируете сообщение начальной точки, то добавьте поля в отчет, при запуске вы получите следующий вывод:

1row1     2row1
1row1     2row2
1row1     2row3
1row2     2row1
1row2     2row2
1row2     2row3
1row3     2row1
1row3     2row2
1row3     2row3

Отсюда вы можете изменить свою группировку, чтобы получить нужный вам вывод.

Вы можете также использовать это же соединение с вложенными отчетами вместо того, чтобы делать эту связь, когда у вас есть основной отчет, извлеките информацию из file1.txt, а затем поместите вложенный отчет в нижний колонтитул отчета, который извлекается из file2.txt. В этом варианте текст не будет сопоставляться, но он все равно будет в том же отчете.

Надеюсь, это поможет некоторым.

1 голос
/ 02 июля 2009

Это проще, чем вы думаете. Я сам создал его до того, как написал это, чтобы убедиться, что делаю правильные шаги. Используя версию CR XI и файл .txt, я выполнил следующие действия:

  1. Для каждого текстового файла, который вы хотите импортировать, создайте подраздел в своем отчете (т. Е. DetailsA, DetailsB и т. Д.). Если ваш список текстовых файлов постоянно меняется (и я не думаю, что это зависит от вашего описания), вам понадобится другой метод.
  2. Убедитесь, что ваш текстовый файл разделен запятыми, а первая строка содержит имена полей. Если эти текстовые файлы на самом деле являются текстовыми (т. Е. Не таблицами), просто поместите фиктивное имя переменной в первой строке, чтобы Crystal увидела текст в виде таблицы данных с одной строкой.
  3. Для каждого текстового файла, который вы хотите отобразить, создайте новый подотчет (Insert-> Subreport)
  4. В меню выбора базы данных выберите «Создать новое соединение» -> «Access / Excel (DAO)»
  5. В разделе «Тип базы данных» в нижней части экрана вы увидите опцию «Текст».
  6. Выберите ваш файл.
  7. Relax! (У меня хорошее настроение сегодня утром, не знаю почему)
0 голосов
/ 22 июня 2009

Еще одно предложение, тогда:

  • Создать новую таблицу FILECONTENTS (первичный ключ varchar с именем файла, BLOB-объект содержимого)
  • Создайте сценарий, который по расписанию заполняет эту таблицу именами файлов и содержимым всех файлов (при условии, что существует конечное количество файлов и что вы можете узнать о них)
  • Измените запрос источника данных отчета, чтобы объединить его с таблицей FILECONTENTS и добавьте поле содержимого в отчет.
0 голосов
/ 25 июня 2009

Вы можете настроить файл DSN. Но это ориентировано на данные табличных файлов, а не на текст.

Насколько велики эти текстовые файлы? Вы хотите отобразить все содержимое каждого файла?

Вероятно, нет простого способа динамического чтения в файле из Crystal. Скорее всего, вам придется вставить в отчет набор данных, содержащий содержимое файла.

0 голосов
/ 22 июня 2009

Полагаю, если у вас есть функция, которая принимает имя файла в качестве аргумента и возвращает содержимое этого файла - вы можете использовать эту функцию в формуле Crystal Report.

Я не знаком с текущим CR, прошло много лет с тех пор, как я последний раз использовал его (последний раз использовал версию 8). В версиях, которые я использовал, такая функция не была встроенной. Тогда вам нужно было создать UFL (библиотеку пользовательских функций), содержащую нужные вам функции. Если я правильно помню, вы должны были сделать это с помощью COM.

В наше время, я полагаю, вы можете расширить CR, используя какой-то другой механизм, например, написание кода .NET?

Я предлагаю вам поискать в документации по CR термин UFL.

...