Частичный экспорт баз запросов

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Частичный экспорт баз запросов

Сообщение Torkvemada » 31 авг 2006, 14:43

Жутко извиняюсь за свою безграмотность, но может быть кто-нибудь подскажет как можно в запросе прописать так, что бы выводилось только ограниченное число записей (на пример,записи с номером меньшим 65'000, или с номером в промежетке с 65'001 по 130'000).

Смысл в том, что в Access импортировать не получается (кодировка русского текста меняется до неузнаваемости), а Excel в случае превышения заветного предела в 65'536 начинает затирать первые записи?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 31 авг 2006, 14:46

Тебе же ответили уже.
Ищи-читай FIRST - SKIP.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 авг 2006, 14:46

зря новый топик создал. старый можно переименовать (отредактировав свое письмо), а по вопросу тебе ответили - first/skip в FB, order by rows в IB >6.5 или в FB 2.0.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 авг 2006, 14:53

собственно, если копируемая таблица таки имеет первичный ключ, :) то достаточно указать условие where, и покопировать данные в 2 приема :)

насчет копирования - нужно использовать кодировку в коннекте такую же, с которой база создана или данные в базе. Тогда и в access все покатит. См. настройки odbc, или через что ты там пытаешься в аксес это импортировать.

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Сообщение Torkvemada » 31 авг 2006, 15:03

kdv писал(а):собственно, если копируемая таблица таки имеет первичный ключ, :) то достаточно указать условие where, и покопировать данные в 2 приема :)
Ну собственно говоря, я так и хотел, только не знаю как запрос модифицировать. Можешь примерчик написать, плз?

where first/skip

или как?
ни разу с этим не сталкивался, так сразу сложно понять! :(

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 авг 2006, 15:45

тебе это вообще зачем надо?
Можешь примерчик написать, плз?
не хочу. потому что до сих пор не знаю, какая у тебя версия IB/FB.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 авг 2006, 18:50

повторяю вопрос - "какая у тебя версия IB/FB.". От этого зависит ответ на твой исходный вопрос.

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Сообщение Torkvemada » 01 сен 2006, 05:54

kdv писал(а):повторяю вопрос - "какая у тебя версия IB/FB.".
IB >6.5
kdv писал(а):тебе это вообще зачем надо?.".
Хочу в Excel двумя, или тремя заходами вытащить данные запроса.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 сен 2006, 10:53

А кто тебе запрещает в проге это делать? Разбиваешь записи датасета на куски по 65535 и вставляешь их в страницы Экселя...

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Сообщение Torkvemada » 01 сен 2006, 11:04

CyberMax писал(а):А кто тебе запрещает в проге это делать?


Никто не запрещает.
Просто я не знаю как это делается

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 сен 2006, 11:12

Вот это и надо было начинать. Пример (Delphi):

Код: Выделить всё

repeat
  for I := 0 to $FFFF do
    if not DataSet.Eof then
    begin
      ... // Код вставки записи в Excel
      DataSet.Next;
    end;
until DataSet.Eof;

OX
Сообщения: 24
Зарегистрирован: 26 окт 2004, 17:08

Сообщение OX » 01 сен 2006, 12:12

CyberMax
А нельзя ли пояснить, в чем смысл двух циклов?
А то

Код: Выделить всё

  while not DataSet.Eof do
  begin
     // Код вставки записи в Excel 
     DataSet.Next;    
  end;
 
как-то проще воспринимается...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 01 сен 2006, 12:30

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 сен 2006, 12:48

IB >6.5
что значит > 6.5 ? Это 7.0, 7.1, 7.5 ?
В любом случае в этих версиях нет first/skip, но есть order by ... rows. См. документацию (datadef.pdf) на свою версию.

Torkvemada
Сообщения: 21
Зарегистрирован: 02 авг 2006, 11:28

Сообщение Torkvemada » 01 сен 2006, 12:57

kdv писал(а): что значит > 6.5 ? Это 7.0, 7.1, 7.5 ?
В любом случае в этих версиях нет first/skip, но есть order by ... rows. См. документацию (datadef.pdf) на свою версию.
InterBase 7.5, FireBird 2.0
а на сайте на русском языке может быть что-то есть.
Вот это и надо было начинать. Пример (Delphi):
Про Delphi знаю, только, что оно есть

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 01 сен 2006, 13:03

так IB7.5 или FB2.0?
или оба сразу :shock:

OX
Сообщения: 24
Зарегистрирован: 26 окт 2004, 17:08

Сообщение OX » 01 сен 2006, 13:04

WildSery
Спасибо, понатно.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 сен 2006, 13:07

а на сайте на русском языке может быть что-то есть.
есть. ты на сайте-то был? В разделе Interbase есть ссылка на переводную документацию по 7.x. а langref.pdf можно читать и в оригинале.
Разработчик ОБЯЗАН уметь читать по английски в таком (минимальном) объеме.

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 сен 2006, 13:10

WildSery писал(а):Внешний цикл как раз и должен создавать новый документ (CyberMax не вставил комментарий в это место, к сожалению), а вложенный цикл заполняет его фиксированным числом записей.
Думал, что тут и так все понятно... :shock:. Для тех, кто не в курсе, объясняю. По терминологии MS файл Excel'я - книга. Книга состоит из страниц. В страницах находятся строки. В одной странице может быть максимум 65535 строк ($FFFF). То есть на ПК строки отводится 2 байта :). Проведя аналогию, можно сказать, что файл экселя - это БД, страница - это таблица БД. Ну а строка страницы - это запись таблицы.
Да, между repeat и for должен быть код создания новой страницы в книге.
Torkvemada писал(а):Про Delphi знаю, только, что оно есть
На чем тогда пишете?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 01 сен 2006, 13:30

CyberMax писал(а):Думал, что тут и так все понятно... :shock:
Как видишь, есть варианты :)

Ответить