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

Вниз

Много строк в одной записи!   Найти похожие ветки 

 
ser_ega   (2004-11-10 21:12) [0]

Мастера подскажите! Как добавить запись у которой одно или несколько полей будет иметь много строк!
Примерно так:

|-|------|-------|
| |Серега| Физика|
|1|      | Химия |
| |      | Матем.|
|-|------|-------|
| |Макс  | Геогр.|
|2|      | Информ|
|-|------|-------|


 
Vit@ly ©   (2004-11-10 21:26) [1]

| Физика|
| Химия |
| Матем.|

А мемополе не спасет? :)


 
ser_ega   (2004-11-10 21:48) [2]

Так я пробовал уже! Но в этом поле все время написано TMemo, а не Физика, Матем, Химия...


 
Vit@ly ©   (2004-11-10 21:58) [3]

Так ты видимо говоришь о DBGrid?
Есть решения по отображению в гриде мемеполей. Поищи


 
ser_ega   (2004-11-10 22:01) [4]

А где искать?


 
Vit@ly ©   (2004-11-10 22:05) [5]

Королевство Делфи


 
Vit@ly ©   (2004-11-10 22:26) [6]

Как показать содержимое Memo-поля в DBGrid?

Поумолчанию, DBGrid не может отображать memo-поля. Однако, проблему можно решить при помощи события OnDrawDataCell в DBGrid.

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const  
                Rect: TRect; Field: TField; State:  
                TGridDrawState);  

var  
 P: array [0..50] of char; {размер массива, это количество необходимых символов}
 bs: TBlobStream;          {из memo-поля}  
 hStr: String;  

begin  
 if Field is TMemoField then  
 begin  
   with (Sender as TDBGrid).Canvas do  
   begin   {Table1Notes это TMemoField}  
     bs := TBlobStream.Create(Table1Notes, bmRead);  
     FillChar(P,SizeOf(P),#0); {строка завершается нулём}  
     bs.Read(P, 50); {читаем 50 символов из memo в blobStream}  
     bs.Free;  
     hStr := StrPas(P);  
     while Pos(#13, hStr) > 0 do  {удаляем переносы каретки и}
       hStr[Pos(#13, hStr)] := " ";  
     while Pos(#10, hStr) > 0 do  {отступы строк}
       S[Pos(#10, hStr)] := " ";  

     FillRect(Rect);  {очищаем ячейку}
     TextOut(Rect.Left, Rect.Top, hStr);  {заполняем ячейку данными из memo}
   end;  
 end;  
end;
 

Замечание: перед тем, запустить пример, создайте объект TMemoField для memo-поля двойным кликом по компоненту TTable и добавлением memo-поля.

Взято с Исходников.ru http://www.sources.ru


 
ser_ega   (2004-11-10 23:24) [7]

Да вот я там тоже такое нашел! Только не могу понять что такое Table1Notes? И почему-то у меня не получается создать TMemoField! Я делаю двойнок клик по TTable, а выскакивает что то похожее на навигатор какой-то (кнопки вперед и назад)!
Может вы обьясните как правильно его создать!


 
ser_ega   (2004-11-11 22:07) [8]

Теперь когда обрабатывается эта процедура выскакивает ошибка  Cannot access field "ИФА" as type Integer! Что делать?


 
ser_ega   (2004-11-12 07:47) [9]

Что ни у кого не было такой ошибки?


 
sniknik ©   (2004-11-12 08:09) [10]

ну ты спросил, конечно не было, чтобы я назвал поле именем "ИФА" да ни за что.

во первых сделай его на английском, если оно у тебя вообше в таблице есть. во вторых что за "эта процедура"? как ты ее вызываеш? на какой именно строке? описывай условия,
или посылай свой вопрос туда где ребусы составляют они поймут.


 
ser_ega   (2004-11-12 22:54) [11]

Я так понимаю DBGrid1DrawDataCell вызывается сама, как только в DBGrid добавляются строки! Delphi не показывает в какой строке ошибка!
Может кто-то сделает исходник работающий с TmemoField или может подкажете где его найти!


 
sniknik ©   (2004-11-12 23:24) [12]

> Delphi не показывает в какой строке ошибка!
да ну? вреш небось?

http://delphimaster.net/view/1-1100159363/
обрати внимание на посты Digitman-а


 
ser_ega   (2004-11-12 23:34) [13]

Да не то время шоб врать!


 
ser_ega   (2004-11-12 23:44) [14]

Так интересно то что если DBGrid1DrawDataCell не включать то все добавляется, а с ним никак не хочет!


 
sniknik ©   (2004-11-13 01:14) [15]

всетаки ты вреш насчет ошибок, они не могут не показываться (сообщение то откудато увидел)

ну да ладно, вот переделал, делает то же самое(!!!, а не то что ты ожидал) что и в [6], но надеюсь понятнее будет (хоть и убрал коментарии ;)

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
const
 LEN_ST = 50;
var
 bs: TMemoryStream;
 hStr: String;
begin
 if not (Field is TMemoField) then Exit;

 bs:= TMemoryStream.Create;
 try
   TMemoField(Field).SaveToStream(bs);
   hStr:= StringOfChar(#0, LEN_ST);
   bs.Position:= 0;
   bs.Read(hStr[1], LEN_ST);
 finally
   bs.Free;
 end;

 hStr:= Trim(StringReplace(hStr, #13#10, " ", [rfReplaceAll]));
 TDBGrid(Sender).Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, hStr);
end;


 
ser_ega   (2004-11-13 22:53) [16]

Ладно уговорили, буду искать у себя ошибку! Т.к. всеравно ошибка выскакивает!
А вы мне не подскажете какие условия для Tmemofield и есть ли они вообще?


 
ser_ega   (2004-11-16 22:59) [17]

Подкажите что эта ошибка означает? Где мне искать ошибку?


 
ser_ega   (2004-11-19 20:01) [18]

Я вычислил что ошибка возникает даже без DBGrid1DrawDataCell! Может я не так как-то добавляю memo поле или TMemoField? Если не сложно расскажите поподробнее! Плииииииииииииззззз!


 
Term   (2004-11-19 20:05) [19]

да не мучайся возьми ehlib там всё это реализованно, хотя иной раз сделать самому полезно для общего развития


 
ser_ega   (2004-11-19 20:28) [20]

Что такое ehlib? Где его взять?


 
ser_ega   (2004-11-20 00:15) [21]

Ребя ну сильно горит добить мне эту прогу! П О Г И Т Е КТО Ч Е М МОЖЕТ!


 
ser_ega   (2004-11-20 13:31) [22]

ВСЕ я ошибку исправил! Но ни какого результата не добился - в ячейке вместо моего текста отображается (MEMO)! Что еще не так?


 
ser_ega   (2004-11-20 20:09) [23]

Я вычислил что это процедура вообще не вызывается! Как ее принудительно вызвать?


 
sniknik ©   (2004-11-21 11:19) [24]

ты думаеш так ктонибудь тебе поможет?
только по инфе о том что - была ошибка, ты ее исправил (с трудом, попутно выяснил что она не относится к DBGrid1DrawDataCell вообше, а какая то твоя), но желаемого не добился т.к. она (эта процедура) оказывается даже не вызывается...

с такими сведениями можно романы писать (накал страстей, куча эмоций, никаких фактов, можно домыслить), но не глюки искать.

ответь сам, если поймеш
что, где, как, откуда, + на чем рушится и что говорит. тогда можно с тобой о чемто говорить будет.

по поводу моего кода в [15], предупреждаю еше раз, он делает то же что и в [6], а не то что ты возможно (скорее всего) ожидаеш!
т.что если добьешся что у тебя это заработает,не расстраивайся (сильно в всяком случае ;о)).

> Как ее принудительно вызвать?
книжки читать не пробовал? как крайнее средство.


 
ser_ega   (2004-11-21 12:41) [25]

я чето не пойму что ты имееш ввиду говоря
> а не то что ты возможно (скорее всего) ожидаеш!

Ты хочеш сказать что используя эти коды я не добьюсь того что хочу?


 
sniknik ©   (2004-11-21 13:58) [26]

> Ты хочеш сказать что используя эти коды я не добьюсь того что хочу?
естественно, и я честно сразу предупреждал.
просто переделал уже данный код в более понятный и не зависящий от задания/незадания какихто там полей.

тебе там просто первые 50 символов из мемо пола покажет, но никакой многострочности. (правда судя по тому что с этим элементарным не можеш справится, то за многострочный садится тебе рановато, это на порядок сложнее)
найди готовый компонент (советовали уже).


 
ser_ega   (2004-11-21 14:12) [27]

Ну так а зачем тогда этот весь базар? Я же вам четко вопрос задал!

Дайте ссылочку откуда этот компонет можна скачать! Он наподобии DBGrid? Можна будет потом сделать отчет используя Qreport?


 
ser_ega   (2004-11-21 15:12) [28]

Я скачал! А как его установить? Как чтобы он появился там где и DBgrid?


 
sniknik ©   (2004-11-21 17:07) [29]

> Ну так а зачем тогда этот весь базар? Я же вам четко вопрос задал!
да ну? перечитай, кто и на что отвечал. и потом если 2 + 2 не можеш сложить то куда тебе интегралы решать?
код то элементарный ты еще после > Vit@ly ©   (10.11.04 22:26) [6]
должен был понять что это не то, но ты начал обсуждать, типа хочеш понять... мой код был попыткой обьяснить (хотя бы начало).

p.s. отвечать на то что в > sniknik ©   (21.11.04 11:19) [24] ты я вижу не намерен, и подумать над этим, только дай да дай. до свидания.


 
Janb   (2004-11-22 08:03) [30]

Ser-ega
Замечание: перед тем, запустить пример, создайте объект TMemoField для memo-поля двойным кликом по компоненту TTable и добавлением memo-поля.

Это значит когда навигатор выйдет (как ты его назвал) наведи на него и нажми правую кнопку мыши там есть пункт new field дальше думаю поймешь. а насчет процедур ты просто не копируй его куда попало например процедуру procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
можешь найти на событиях дбгрида то есть в инспекторе объектов есть рядом events


 
serko   (2004-11-22 13:34) [31]

Спасибо но я вкурсе!



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

Форум: "Базы";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.038 c
3-1100614292
CHTR
2004-11-16 17:11
2004.12.19
Не могу вытащить картинку из BLOB поля


1-1102123621
Bobby Digital
2004-12-04 04:27
2004.12.19
Cursor


14-1101560739
VID
2004-11-27 16:05
2004.12.19
Нужна программа для автоматической смены обоев рабочего стола


14-1101665452
syte_ser78
2004-11-28 21:10
2004.12.19
Не прикол, правда интересно


14-1102016109
Stavskiy
2004-12-02 22:35
2004.12.19
Вернемся к Delphi





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