Форум программистов, компьютерный форум, киберфорум
Sasha
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Сохранение содержимого БД в формат CSV

Запись от Sasha размещена 14.12.2013 в 00:56
Показов 5504 Комментарии 9
Метки c++

Здравствуйте!!! Ко мне часто обращаются за помощью по части БД. И один из часто задаваемых вопросов - это... Как можно сохранить содержимое БД в файл и открыть через программу Microsoft Office Excel? Для решения такой задачи есть формат CSV , который отлично открывает Microsoft Office Excel.

Что это за формат CSV можно прочитать здесь: http://ru.wikipedia.org/wiki/CSV.

Пример кода сохранения и открытия в Microsoft Office Excel представлен ниже. Здесь использован разделитель ; (точка с запятой) хотя может быть и другой разделитель.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void __fastcall TMainForm::ExportCSVFile()
{
 TStringList *list = new TStringList();
 TStringList *titlegrid = new TStringList();
 list->Clear();
 titlegrid->Clear();
 AnsiString ghj,txt;
 int a = 0;
 ADOQuery1->DisableControls();
 
 for(int b=0; b<DBGrid1->Columns->Count; b++)
   {
 
     titlegrid->Add(DBGrid1->Columns->Items[b]->Title->Caption);
 
   }
 
    ghj = titlegrid->Text;
    ghj = StringReplace(ghj,"\r\n",";",TReplaceFlags() << rfReplaceAll);
    list->Add("");
    list->Add("№;"+ghj);
    ADOQuery1->First();
    while(!ADOQuery1->Eof)
    {
      txt = "";
      a++;
      for(int i=0; i<DBGrid1->Columns->Count;i++)
      {
       txt += ADOQuery1->Fields->Fields[i]->AsString+";";
      }
      txt = IntToStr(a)+";" + txt;
      list->Add(txt);
      ADOQuery1->Next();
    }
  
  ADOQuery1->First();
  ADOQuery1->EnableControls();
  AnsiString stroka = StringReplace(Now().TimeString()+"_"+ Now().DateString(),":","_",TReplaceFlags() << rfReplaceAll)+".csv";
  String WayToBase = ExtractFilePath(Application->ExeName)+stroka;
  list->SaveToFile(WayToBase);
  ShellExecute(Handle,"open",WayToBase.c_str(), NULL,NULL,SW_RESTORE);
  delete list;
  list = NULL;
  delete titlegrid;
  titlegrid = NULL;
 
}
Метки c++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 9
Комментарии
  1. Старый комментарий
    Сам весь проект не можешь с архивировать и закрепить?
    Запись от INSULIN размещена 29.08.2015 в 12:01 INSULIN вне форума
  2. Старый комментарий
    Аватар для Sasha
    Нет, проект слишком большой
    Запись от Sasha размещена 08.09.2015 в 14:30 Sasha вне форума
  3. Старый комментарий
    C++
    1
    2
    3
    4
    
    delete list;
      list = NULL;
      delete titlegrid;
      titlegrid = NULL;
    А разве здесь не будет ошибки?
    Удалили объект а потом присваиваем ему значение NULL.
    Запись от Dr.Xank размещена 12.10.2015 в 10:56 Dr.Xank вне форума
  4. Старый комментарий
    Аватар для Sasha
    Цитата Сообщение от Dr.Xank
    C++
    1
    2
    3
    4
    
    delete list;
      list = NULL;
      delete titlegrid;
      titlegrid = NULL;
    А разве здесь не будет ошибки?
    Удалили объект а потом присваиваем ему значение NULL.
    Не будет
    C++
    1
    2
    
    delete list; //освобождение динамической памяти
    list = NULL;// присвоение указателю нулевого значения
    Запись от Sasha размещена 03.11.2015 в 21:42 Sasha вне форума
  5. Старый комментарий
    Аватар для Avazart
    Когда до вас дойдет что нужно юзать умные указатели.

    CSV , который отлично открывает Microsoft Office Excel.
    Ну не совсем, ибо нет "формата" ячеек, эксель может отображать/трактовать ячейки как хочет т.е строку 1000 трактовать как число 1e3.
    Запись от Avazart размещена 03.11.2015 в 21:50 Avazart вне форума
  6. Старый комментарий
    А как изменить ширину столбца? А то надписи наезжают друг на друга, и приходится вручную постоянно двигать ширину столбца в Excel.
    Запись от sanches26 размещена 16.05.2018 в 21:56 sanches26 вне форума
  7. Старый комментарий
    Аватар для Avazart
    А как изменить ширину столбца?
    Какая еще ширина столбца в CSV ?

    Да и походу код туфта ибо не выполняет экранирование.

    Смотрите в сторону Delimiter, DelimitedText
    Запись от Avazart размещена 16.05.2018 в 22:26 Avazart вне форума
  8. Старый комментарий
    Цитата Сообщение от Avazart
    Какая еще ширина столбца в CSV ?

    Да и походу код туфта ибо не выполняет экранирование.

    Смотрите в сторону Delimiter, DelimitedText
    Если запихнуть этот код в баттон, он создает .csv файл, и открывается через Excel и все четко заполняется там, к этому вопросов нет. Но просто, у меня в ячейках много символов может быть, и поэтому не отображается весь текст, приходится растянуть столбец.
    Запись от sanches26 размещена 16.05.2018 в 23:43 sanches26 вне форума
  9. Старый комментарий
    Аватар для Avazart
    Несмотря на наличие RFC, на сегодняшний день под CSV, как правило, понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк и множеством различных способов экранирования спецсимволов. Это значительно затрудняет перенос данных из одних программ в другие, несмотря на всю простоту реализации поддержки CSV.
    1997,Ford,E350,"ac, abs, moon",3000.00
    1999,Chevy,"Venture «Extended Edition»","",4900.00
    1996,Jeep,Grand Cherokee,"MUST SELL! air, moon roof, loaded",4799.00
    Как видите ячейки содержащие пробелы обрамляются в кавычки, так же экранироваться должны " и ;
    Этого я в коде не вижу.

    https://ru.wikipedia.org/wiki/CSV
    Запись от Avazart размещена 17.05.2018 в 12:10 Avazart вне форума
 
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru