Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Новички в программировании > Помощь студентам
Регистрация

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 08.06.2015, 17:33   #41
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Передача данных (экспорт) из базы данных (DBGrid) в MS Word и MS Excell
Delphi

Частенько вижу вопросы о том, как наполнять Экзель или Ворд из DBGrid или Table или Query или в принципе из Базы Данных. Привожу простой пример наполнения из DBGrid

Пример делю на три поста:
  1. Описание формы
  2. Методы работы с Экзелем
  3. Методы работы с Вордом

Описание формы
Код:

unit Unit1;

interface

uses    comobj,//Этот модуль обязателен для работы с MS Office
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, Data.Win.ADODB,
  Vcl.Grids, Vcl.DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;                     //Наш Грид, откуда будем переносить данные
    ADOQuery1: TADOQuery;           //Его набор данных, с которым он связан
    DataSource1: TDataSource;
    ButtonExcell: TButton;              //Кнопка работа с Экзелем
    ButtonMSWord: TButton;           //Кнопка работы с Вордом
    procedure ButtonExcellClick(Sender: TObject);
    procedure ButtonMSWordClick(Sender: TObject);
//Переменные для Ворда и Экзеля
  private  MSWord,WordDoc,WordTable,Excell,Book,Sheet:OleVariant;
    Error:String;
    { Private declarations }
    Function OpenExcell:Boolean;          //Открытие Экзеля
    Function OpenBook:Boolean;           //Открытие в Экзеле книги
    Function OpenSheet:Boolean;         //Получение в книге листа
    Procedure FillExcell;                      //Наполнение листа книги

    Function OpenWord:Boolean;           //Открытие Ворда
    Function OpenWordDoc:Boolean;      //Создание документа
    Function CreateWordTable:Boolean;  //Создание таблицы
    Procedure FillWord;                       //Наполнение таблицы
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

__________________
I'm learning to live...

Последний раз редактировалось Serge_Bliznykov; 08.06.2015 в 18:36.
Stilet вне форума  
Старый 08.06.2015, 17:35   #42
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Методы работы с Экзелем:
Код:


procedure TForm1.ButtonExcellClick(Sender: TObject);
begin
//Если удалось открыть Экзель, создать книгу, и получить ее лист
 if OpenExcell and OpenBook and OpenSheet then begin
//Наполним его, вызвав процедуру наполнения
  FillExcell;
//И покажем на экране
  Excell.Visible:=True;
 end else begin
//Иначе выведем сообщение об ошибке
   ShowMessage(Error);
 end;
end;


procedure TForm1.FillExcell;
var j,i:integer;  Cell:OleVariant;
begin
 with DBGrid1.DataSource.DataSet do begin
//Сначала сделаем шапку колонок
   for i := 0 to Fields.Count-1 do  begin
    Cell:=Sheet.cells[1,i+1];
//Запишем имена колонок в ячейки первой строки
    Cell:=Fields[i].FullName;
//И разукрасим
    Cell.Interior.ColorIndex:=3;
   end;

//Перескочим на первую запись в наборе (В гриде)
   first;
   j:=2;
//И пройдя до конца по нему
   while not eof  do begin
//Наполним ячейки Экзела данными из ДатаСета, с которым связан Открытый Грид
    for i := 0 to Fields.Count-1 do
     Sheet.cells[j,i+1]:=Fields[i].AsString;
     inc(j);
    next;
   end;
 end;
end;

function TForm1.OpenBook: Boolean;
begin
//Попытаемся создать книгу в Экзеле
 Result:=true; Error:='';
 Book:=Excell.Workbooks.Add();
 if VarIsClear(Book) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Книги: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenExcell: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся открыть Экзел
 Excell:=CreateOleObject('Excel.Application');
 if VarIsClear(Excell) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Экзеля: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenSheet: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся получить первый лист в открытой книге
 Sheet:=Book.worksheets[1];
 if VarIsClear(Sheet) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Страницы: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

__________________
I'm learning to live...

Последний раз редактировалось Stilet; 23.10.2015 в 19:03.
Stilet вне форума  
Старый 08.06.2015, 17:37   #43
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Методы работы с Вордом:
Код:

procedure TForm1.ButtonMSWordClick(Sender: TObject);
begin
//Если удалось открыть Ворд, создать документ и таблицу
 if OpenWord and OpenWordDoc and CreateWordTable then begin
//Наполним ее
  FillWord;
//И покажем на экране
  MSWord.Visible:=True;
 end else begin
//Иначе выведем сообщение об ошибке
   ShowMessage(Error);
 end;
end;

function TForm1.CreateWordTable: Boolean;
begin
 Result:=true;
//Создадим таблицу в Ворде
 with DBGrid1.DataSource.DataSet do
   WordTable:=WordDoc.Tables.Add(WordDoc.Range
    ,RecordCount //Указав кол-во строк
    ,FieldCount   //И колонок заранее
   );
//Взяв их из DBGrid (а фактически из открытой базы данных)
end;



//Наполнение В Ворде
procedure TForm1.FillWord;
var j,i:integer;  Cell:OleVariant;
begin
 with DBGrid1.DataSource.DataSet do begin
   for i := 0 to Fields.Count-1 do  begin
//Сначала сделаем шапку колонок и разукрасим их
    Cell:=WordTable.cell(1,i+1).range;
    Cell.Text:=Fields[i].FullName;
    Cell.ParagraphFormat.Alignment :=1;
    Cell.Font.Bold := true;
   end;

//Перескочим на первую запись в наборе (В гриде)
   first;
   j:=2;
//И пройдя до конца по нему
   while not eof  do begin
    for i := 0 to Fields.Count-1 do
//Наполним ячейки Экзела данными из ДатаСета, с которым связан Открытый Грид
     WordTable.cell(j,i+1).range.Text:=Fields[i].AsString;
     inc(j);
    next;
   end;
 end;
end;


function TForm1.OpenWord: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся открыть Ворд
 MSWord:=CreateOleObject('Word.Application');
 if VarIsClear(MSWord) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Ворда: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenWordDoc: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся создать документ в открытом Ворде
 WordDoc:=MSWord.Documents.Add();
 if VarIsClear(WordDoc) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Документа: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

Любителям копипасте и школоте: Да, да, вы угадали. Можете код из трех сообщений копипастить в тупую. Поздравляю. Вам вдумываться в него не обязательно.
Всем остальным - рекомендую изучить и разобраться.
__________________
I'm learning to live...
Stilet вне форума  
Старый 14.09.2015, 22:13   #44
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Вывод массива змейкой (формула)
По мотивам http://www.programmersforum.ru/showt...40#post1534240
Автор BDA.
Паскаль (любой)
Код:

program Project1;
const
  n = 10;
var
  i, j, k: integer;
begin
  for i := 0 to n - 1 do
  begin
    for j := 0 to n - 1 do
    begin
      k := i + j;
      write(1 + k * (k + 1) div 2 - ord(k > n) * (k - n) * (k - n + 1) +
            (k mod 2) * j + ((k + 1) mod 2) * i - ord(k >= n) * (k - n + 1):5);
    end;
    writeln;
  end;
  writeln;
  readln;
end.

Си (классика)
Код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, n = 5, k, v;
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j) {
            k = i + j;
            v = 1 + k * (k + 1) / 2 - (k > n) * (k - n) * (k - n + 1) +
                (k % 2) * j + ((k + 1) % 2) * i - (k >= n) * (k - n + 1);
            printf("%5d", v);
        };
        printf("\n");
    };
    getchar();
    return 0;
}

Для С++ нужно заменить:
printf("%5d",v); на cout.width(5); cout<<v;
printf("\n"); на cout<<endl;
getchar(); на cin.get();
__________________
I'm learning to live...

Последний раз редактировалось BDA; 14.09.2015 в 22:24.
Stilet вне форума  
Старый 20.09.2015, 20:13   #45
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию Шифрование. Crypto API

Шифрование стоки. Crypto API
Delphi/Free Pascal

Используется модуль jwawincrypt вместо wincrypt, который признан неудачным, но может быть все же использован.

Код:

program project1;
uses sysutils,windows,jwawincrypt;

Function CryptDecript(aStr,Password:AnsiString;Decrypt:Boolean):AnsiString;
var b:Boolean;
  hProv: HCRYPTPROV; AProvType,AAlgHash,AAlgKey:DWORD;
   mhash:HCRYPTHASH;  key: HCRYPTKEY;  lBufLen, ABufferSize:Cardinal;
begin


      AAlgHash:=CALG_MD5; //Алгоритм для создания Хеша
      AAlgKey:=CALG_RC4;  //Алгоритм для ключа
      AProvType:=PROV_RSA_FULL; //Тип провайдера, который будет шифровать

      //Активируем провайдер.
      if not CryptAcquireContext(hProv, nil, nil, AProvType, CRYPT_VERIFYCONTEXT) then begin
       Writeln('CryptAcquireContext error: '+SysErrorMessage(GetLastOSError));
      end else
      //Создаем хеш
		  if CryptCreateHash(hProv, AAlgHash, 0, 0, mhash) then begin
        //Хешируем пароль
  		  if CryptHashData(mhash, @Password[1], length(Password), 0) then begin
         //Создаем на основе хеша и алгоритма ключ для шифрования
         if CryptDeriveKey(hProv, AAlgKey, mhash, 0, key) then begin
          ABufferSize:=Length(aStr);
          lBufLen:=ABufferSize;
          //Готовим результирующую перемену, которая будет содержать шифровку или расшифровку
          Result:=aStr;
          if Decrypt then begin  //Шифруем данные
           b:=CryptDecrypt(key, 0, true, 0, PByte(@Result[1]),lBufLen)
          end else begin //Или расшифровываем
           b:=CryptEncrypt(key, 0, true, 0, PByte(@Result[1]),lBufLen, ABufferSize);
					end;

          //Далее вывод ошибок, если они возникли
    		  if not b then begin
    		   Writeln('CryptEncrypt error: '+SysErrorMessage(GetLastOSError));
    		  end;

 	  		end else begin
    	   Writeln('CryptDeriveKey error: '+SysErrorMessage(GetLastOSError));
    	  end;

				end else begin
  		   Writeln('CryptHashData error: '+SysErrorMessage(GetLastOSError));
  		  end;
		  end else begin
		   Writeln('CryptCreateHash error: '+SysErrorMessage(GetLastOSError));
		  end;
      //Освобождаем криптопровайдер
      CryptReleaseContext(hProv, 0);
end;

var pass,s,sIn,sOut:AnsiString;
begin
  //Строка для шифрования и пароль
  s:='Hello World'; pass:='Password';

  //Шифруем строку
  sOut:=CryptDecript(s,pass,false);
    writeln('Crypt = ',sOut);
  //Расшифровываем строку
  sIn:=CryptDecript(sOut,pass,true);
    writeln('DeCrypt = ',sIn);
  readln;
end.

C#
Пока пример без пароля:
Код:

using System;
using System;
using System.Security.Cryptography;//Сборка криптографиии


namespace CryptoAPI
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			/* С установкой пароля. Но увы не работает как надо, поэтому в примере закомментировано
			string Pass = "Password";
			//Создаем строку безопасности
			System.Security.SecureString ss = new System.Security.SecureString();
			//Заносим в нее пароль посимвольно
			foreach (char c in Pass)
				ss.AppendChar (c);
			//Устанавливаем параметры для криптопровайдера
			CspParameters csp = new CspParameters();
				csp.KeyPassword = ss;
				csp.Flags = CspProviderFlags.UseUserProtectedKey;
			*/

			//Объявляем криптопровайдер RSA
			RSACryptoServiceProvider rs = new RSACryptoServiceProvider (/*csp*/);

			//Задаем строку для шифрования
			string s = "Hello World";
			System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding ();

			//Шифруем в массив байт
			byte[] bCrypt=rs.Encrypt (enc.GetBytes (s),false);
			//Расшифровываем в другой массив
			byte[] bEncrypt = rs.Decrypt(bCrypt,false);

			//Выводим и то и другое
			Console.WriteLine ("Source = {0}\n\nCrypted = {1}\n\nDeCrypted = {2}"
				,s
				,enc.GetString (bCrypt)
				,enc.GetString (bEncrypt));
			Console.ReadKey ();
		}
	}
}

__________________
I'm learning to live...

Последний раз редактировалось Stilet; 20.09.2015 в 21:15.
Stilet вне форума  
Закрытая тема



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Теория вероятности. Решить 2 задачи Worldqwerty Помощь студентам 2 14.01.2013 14:52
Типичные задачи на С++ Heming Помощь студентам 3 15.10.2012 11:13
Теория языков программирования и проектирование компиляторов (задачи) Onni Помощь студентам 0 03.06.2012 21:18
Теория информации + теория её передачи. vedro-compota Общие вопросы по программированию, компьютерным наукам 4 23.10.2010 10:06
решение инженерных задач современными средствами компьютерной техники и типичные задачи автоматизированны Дініс Свободное общение 1 12.09.2009 00:02




14:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru