Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2008, 14:50   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
Смущение копирование определенного набора данных из dbgrid в clipboard

Здравствуйте!У меня есть такой код:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  bm: TBookMark;
  pch, pch1: PChar;
  s, s2: string;
  j: integer;
begin
  s := '';
  for j := 0 to dbgrid3.Columns.Count - 1 do
    s := s + dbgrid3.Columns.Items[j].Title.Caption + #9;
  s := s + #13 + #10;
  if not dbgrid3.DataSource.DataSet.active then
  begin
    ShowMessage('Нет выборки!!!');
    Exit;
  end;
  try
    dbgrid3.Visible := False; 
    bm := dbgrid3.DataSource.DataSet.GetBookmark; 
    dbgrid3.DataSource.DataSet.First;
    while not dbgrid3.DataSource.DataSet.EOF do
    begin
      s2 := '';
      for j := 0 to dbgrid3.Columns.Count - 1 do
      begin
        s2 := s2 + dbgrid3.Columns.Items[j].Field.AsString + #9;
      end;
      s := s + s2 + #13 + #10;
      dbgrid3.DataSource.DataSet.Next;
    end;
   GetMem(pch, 100);
    GetMem(pch1, 100);
    GetKeyboardLayoutName(pch);
    StrCopy(pch1, pch);
    while pch <> '00000419' do
    begin
      ActivateKeyboardLayout(HKL_NEXT, 0);
      GetKeyboardLayoutName(pch);
      if strComp(pch, pch1) = 0 then
       StrCopy(pch, '00000419');
    end;

    clipboard.AsText := s; 
                         
    while strComp(pch, pch1) <> 0 do  
    begin
      ActivateKeyboardLayout(HKL_NEXT, 0);
      GetKeyboardLayoutName(pch);
    end;

    FreeMem(pch);
    FreeMem(pch1);

    dbgrid3.DataSource.DataSet.GotoBookmark(bm);
    ShowMessage('Данные скопированы!');
  finally
    dbgrid3.Visible := True;
end;
который копирует содержимое dbgrida в буфер обмена.Как скопировать содержимое не всего грида,а,допустим только 5 столбца?
kate158 вне форума Ответить с цитированием
Старый 15.10.2008, 15:01   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

S:=dbgrid3.Columns.Items[4].Field.AsString
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.10.2008, 15:19   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

>>_SERGEYX_
Может я чего-то не догоняю,но при изменении строки на
Код:
S:=dbgrid3.Columns.Items[5].Field.AsString
и при вставке данных из буфера,добавляются 6 одинаковых столбцов (в таблице БД у меня 6 столбцов),а мне нужен один....

Последний раз редактировалось kate158; 15.10.2008 в 15:41.
kate158 вне форума Ответить с цитированием
Старый 15.10.2008, 15:41   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Нужно убрать цикл
for j := 0 to dbgrid3.Columns.Count - 1 do
..............................
и вместо цикла получать содержимое только 5-го столбца (4-го от нуля), а не столбца [j] из цикла.

И зачем столько писанины?
Вот этим кодом я копирую содержимое в Strings.
Код:
procedure DatasetToInfFile(aDataset: TDataSet; aStrList: TStrings);
var i: integer;
begin
  aDataSet.First;
  while not aDataSet.EOF do
  begin
    for i := 0 to (aDataset.FieldCount - 1) do
      aStrList.Add(aDataset.Fields[i].FieldName + '|' +
        aDataset.Fields[i].AsString);
    aDataSet.Next;
  end;
end;
Подставь вместо Strings буфер обмена
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.10.2008, 16:35   #5
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Извините за назойливость,просто хочу чтобы мой код заработал корректно.
Вот, код
Код:
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
  dbgrid3.DataSource.DataSet.First;
  while not dbgrid3.DataSource.DataSet.EOF do
  begin
   for i := 0 to (dbgrid3.DataSource.Dataset.FieldCount - 1) do
     Clipboard.AsText:=(dbgrid3.DataSource.Dataset.Fields[5].AsString);
    dbgrid3.DataSource.DataSet.Next;
  end;
end;
В буфере одна запись..Здесь явно чего-то не хватает.

Последний раз редактировалось kate158; 15.10.2008 в 16:44.
kate158 вне форума Ответить с цитированием
Старый 15.10.2008, 17:53   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от kate158 Посмотреть сообщение
Извините за назойливость,просто хочу чтобы мой код заработал корректно.
Вот, код
Код:
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
  dbgrid3.DataSource.DataSet.First;
  while not dbgrid3.DataSource.DataSet.EOF do
  begin
   for i := 0 to (dbgrid3.DataSource.Dataset.FieldCount - 1) do
     Clipboard.AsText:=(dbgrid3.DataSource.Dataset.Fields[5].AsString);
    dbgrid3.DataSource.DataSet.Next;
  end;
end;
В буфере одна запись..Здесь явно чего-то не хватает.
Код:
  while not dbgrid3.DataSource.DataSet.EOF do
  begin
   for i := 0 to (dbgrid3.DataSource.Dataset.FieldCount - 1) do
     Clipboard.AsText:=(dbgrid3.DataSource.Dataset.Fields[5].AsString);
    dbgrid3.DataSource.DataSet.Next;
  end;

Clipboard.AsText:=(dbgrid3.DataSource.Dataset.Fields[i].AsString);

Последний раз редактировалось vovk; 15.10.2008 в 17:55. Причина: цвет выделил не тем
vovk вне форума Ответить с цитированием
Старый 15.10.2008, 17:59   #7
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

>>vovk
хех..
ерор.
"list index out of bounds(6)"
сегодня просто неудачный день)
kate158 вне форума Ответить с цитированием
Старый 15.10.2008, 18:13   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от kate158 Посмотреть сообщение
>>vovk
хех..
ерор.
"list index out of bounds(6)"
сегодня просто неудачный день)
плин перечитал пнял в общем

Код:
Clipboard.Clear;
DataSet.First;
 while not aDataSet.EOF do
  begin
      Clipboard.AsText:=Clipboard.AsText+(dbgrid3.DataSource.Dataset.Fields[5].AsString);
    DataSet.Next;
 end;
в буфере будет без пробелов все записи с 5 поля

зы
Цитата:
хех..
ерор.
"list index out of bounds(6)"
сегодня просто неудачный день)
странно

Последний раз редактировалось vovk; 15.10.2008 в 18:18.
vovk вне форума Ответить с цитированием
Старый 15.10.2008, 18:18   #9
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject);
var s: string;
begin
  dbgrid3.DataSource.DataSet.First;
  while not dbgrid3.DataSource.DataSet.EOF do
  begin
    s:=s+(dbgrid3.DataSource.Dataset.Fields[5].AsString)+'|';
    //В конце поставили разделитель (|)
    dbgrid3.DataSource.DataSet.Next;
  end;
  Clipboard.AsText:=s;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 15.10.2008, 18:20   #10
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

ОООО.Какой кайф.Спасибо..))
kate158 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование данных из таблицы в таблицу Sack Microsoft Office Access 1 16.09.2008 05:59
Копирование данных из реестра delphin100 Общие вопросы Delphi 5 06.05.2008 16:36
Вставка данных(Excel) из clipboard в DBGrid mahsus Общие вопросы Delphi 1 07.10.2007 02:02
Как выбрать при помощи SQL записи из набора данных pris БД в Delphi 4 22.05.2007 11:24