Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Запрос на объединение строк   Найти похожие ветки 

 
msguns ©   (2005-07-15 11:20) [0]

ADO+ACCESS
Есть 2 таблицы, связанные отношением Master-Detail. В детале есть надцать записей с текстовым полем. Надо одним запросом без создания временного файла получить для каждой записи мастера одну запись, в которой в одном поле сложены все тексты детала.

Пример:

Мастер
 ID    NUM
 24   4567

Детал
 DID  ID     TEXT
  1   24    "Мама "
  2   24    "мыла "
  3   24    "раму "

Результат
 ID    NUM     TEXTSUMMARY
 24   4567  "Мама мыла раму"

Я понял, что в джете такое невозможно
Хочу чтоб попинали ногами ;))


 
Johnmen ©   (2005-07-15 11:22) [1]

Никак не получится. Т.е. совсем никак :)


 
sniknik ©   (2005-07-15 11:35) [2]

переводи access(оболочку) на mssql и делай нем.


 
ЮЮ ©   (2005-07-15 11:48) [3]

А предложения длинные бывают? а то сделать Left Joina для 1х слов со вторыми, далее с третьими и т.д.


 
DiamondShark ©   (2005-07-15 12:10) [4]

Только на клиенте.
Например, вычисляемое поле.


 
msguns ©   (2005-07-15 12:23) [5]

>ЮЮ ©   (15.07.05 11:48) [3]
>А предложения длинные бывают? а то сделать Left Joina для 1х слов со вторыми, далее с третьими и т.д.

Кол-во деталей заранее не известно. Но реально десятки. Длина текста в поле детала до кб.

>DiamondShark ©   (15.07.05 12:10) [4]
>Например, вычисляемое поле.

Как ? В смысле без побочных запросов


 
DiamondShark ©   (2005-07-15 12:30) [6]


> Как ? В смысле без побочных запросов

Без побочных -- никак.
Два датасета будут по-любому.


 
DiamondShark ©   (2005-07-15 12:34) [7]

О, придумал, как без побочных запросов.
В качестве провайдера используем MSDataShape, пишем запрос, возвращающий иерархический рекордсет.
В OnCalcFields вычисляем поле по вложенному рекордсету.

Гы ;)
Формально -- запрос один, без побочных ;)


 
msguns ©   (2005-07-15 12:37) [8]

>DiamondShark ©   (15.07.05 12:30) [6]
>Без побочных -- никак.
Два датасета будут по-любому.

Во-первых, это понятно что два.
Во-вторых, не по-любому. Напрмер через макрос, хоть и геморно до безобразности.

Да уж, паршиво когда нет хранимок ;((


 
DiamondShark ©   (2005-07-15 13:12) [9]

dfm


object Form1: TForm1
 object ADOConnection1: TADOConnection
   Connected = True
   ConnectionString =
     "Provider=MSDataShape;Persist Security Info=False;Mode=Share Deny" +
     " None;Data Source=C:\Documents and Settings\Администратор\Мои до" +
     "кументы\db1.mdb;Data Provider=Microsoft.Jet.OLEDB.4.0"
 end
 object Master: TADODataSet
   Active = True
   Connection = ADOConnection1
   CursorType = ctStatic
   OnCalcFields = MasterCalcFields
   CommandText =
     "SHAPE {select * from Master} Master"#13#10"APPEND ({select ID,Text from Deta" +
     "il} Detail RELATE ID TO ID)"
   object MasterID: TIntegerField
     DisplayWidth = 12
     FieldName = "ID"
   end
   object MasterNUM: TWideStringField
     DisplayWidth = 16
     FieldName = "NUM"
     Size = 50
   end
   object MasterDetail: TDataSetField
     DisplayWidth = 12
     FieldName = "Detail"
     ReadOnly = True
     IncludeObjectField = False
   end
   object MasterText: TStringField
     DisplayWidth = 306
     FieldKind = fkCalculated
     FieldName = "Text"
     Size = 255
     Calculated = True
   end
 end
end


pas

procedure TForm1.MasterCalcFields(DataSet: TDataSet);
var
 Text: String;
 ds: TDataset;
begin
 Text := "";
 ds := MasterDetail.NestedDataSet;
 ds.First;
 while not ds.Eof do begin
   Text := Text + ds.FieldByName("Text").AsString;
   ds.Next;
 end;
 MasterText.Value := Text;
end;


Гламурненько так...


 
msguns ©   (2005-07-15 13:16) [10]

>DiamondShark ©   (15.07.05 13:12) [9]

Благодарю за код. Если не получится решить чисто "по-клиентски", то буду пробовать



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
3-1121373663
Kraft
2005-07-15 00:41
2005.08.28
Функция Locate


4-1120899178
vvvaaa
2005-07-09 12:52
2005.08.28
RasApi


14-1123240807
Gydvin
2005-08-05 15:20
2005.08.28
Сколько комп кушает Ватт


3-1121344401
Брат
2005-07-14 16:33
2005.08.28
Проблема с IBScript


14-1122973817
Incognito
2005-08-02 13:10
2005.08.28
Кризис