Форум: "Базы";
Текущий архив: 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