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

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

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

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

Передача данных (экспорт) из базы данных (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,960
Репутация: 6799
По умолчанию

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


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,960
Репутация: 6799
По умолчанию

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

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,960
Репутация: 6799
По умолчанию

Вывод массива змейкой (формула)
По мотивам 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,960
Репутация: 6799
По умолчанию Шифрование. 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




13:39.


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

купить трафик


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

RusProfile.ru


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