Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
14-1122835504
Гаврила
2005-07-31 22:45
2005.08.28
Во Вторую Мировую Войну СССР вступил на стороне


3-1121672917
vigo
2005-07-18 11:48
2005.08.28
Ввод данных в таблицу (Insert и Commit).


1-1123520853
Galiaf
2005-08-08 21:07
2005.08.28
Управление питанием.


14-1122743563
MaksimkaP
2005-07-30 21:12
2005.08.28
Прокси сервер


1-1123159429
Хрюндель
2005-08-04 16:43
2005.08.28
Памогите перевести такой код из Basic в Delfi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский