Low-Level DB
Аллоха, All!
А я вот щас как сморожу очередную глупость:
Хочется в программе сделать поддержку прав, прога вообще без формы
(даже на чистом API). Я так подумал что проще всего хранить юзеров,
пароли и права в базе, чем создавать велосипеды с record-ами, тем
более что удалять из файла с record-ами геморройно. Впрочем я отвлекся :)
Я хочу реализовать в своей программе работу с базами без всяких
компонентов, на низком уровне. Но т.к. в базах я ПОЛНЫЙ профан, я
остановился в самом начале - создание базы, выбор из нее записи о
юзере и вытаскивания из нее его прав, редактирование базы.
При всех этих проблемах я еще одну себе добавил - желательно чтобы
база работала на MSSQL Server, насколько я понял он есть во всех
виндовозах от win98 (если тупость написал - сильно не пинать, лучше
подскажите базу которая есть во всех виндовозах без всяких MS Office)
В общем пока насочинял/натырил вот такой код (ниже). Он производит
открытие базы + чего-то там выбирает из нее.
Вот вопросы по этому коду:
1) Что писать в MyConn.ConnectionString для MSSQL (ну или что вы
посоветуете)?
2) Как получить записи которые после MyRecSet.Open(...); лежат
(насколько я понял) где-то в MyRecSet? Изыскания с
MyRecSet.GetString(...); ни к чему не привели т.к. документации по
этой функции я не нашел, а телепатическими способностями я не
обладаю.
3) Как в таком же духе создавать таблицы, изменять добавлять?
PS: База будет состоять из полей (ну как минимум на первых порах):
UserName UserPassword - обычные стринги + поле UserRights -
многострочная запись
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
adoint,
ActiveX;
var
MyConn: _Connection;
MyCommand: _Command;
MyRecSet: _Recordset;
OptionalParam: OleVariant;
VarData: PVarData;
begin
OptionalParam := DISP_E_PARAMNOTFOUND;
VarData := @OptionalParam;
VarData^.VType := varError;
CoInitialize(nil);
MyConn := CoConnection.Create;
MyConn.ConnectionString := 'Provider=MSDataShape.1;Data Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Program Files\Common Files\Borland Shared\Data\dbdemos.mdb';
MyConn.Open(MyConn.ConnectionString, '', '', - 1);
MyCommand := CoCommand.Create;
MyCommand.Set_ActiveConnection(MyConn);
MyCommand.CommandText := 'SHAPE {select * from customer} ' +
'APPEND ({select * from orders} AS Orders ' +
'RELATE CustNo TO CustNo) ';
MyRecSet := CoRecordSet.Create;
MyRecSet.Open(MyCommand, OptionalParam, adOpenDynamic, adLockReadOnly, adCmdText);
Writeln(MyRecSet.RecordCount);
Writeln(MyRecSet.Get_Source);
//Writeln(string(MyRecSet.GetString(0, 5, ';', ':', 'ALL')));
readln;
CoUnInitialize;
end.
i686-suse-linux)
Hello, Александр!
On Tue, 7 Jun 2005 16:18:39 +0500 you wrote:
Хе, MSSQL Server - 190 тыс. руб. за однопроцессорную лицензию.
Нету в винде sql-сервера по умолчанию.
А тягать с собой MySQL (или что еше хуже Posgres) - это конечно
благородное занятие, но для таких задач бессмысленное.