Автор |
Сообщение |
leoboec Эксперт |
|
в общем суть такая... пишу программу на си билдере с БД.. на данном этапе БД стандартно paradox.. но думаю что переделаю сразу под MySQL .. и скажем есть БД на сервере как мне синхронизировать записи??? подскажите?? или ссылки на какие нибудь конкретные статьи и методы синхронизации |
|
|
|
|
noobas Эксперт |
|
|
|
|
leoboec Эксперт |
|
noobas писал(а): |
http://www.mysql.ru/docs/man/Replication.html |
большое спасибо! будем вникать |
|
|
|
|
zmeeed Эксперт |
|
|
|
|
leoboec Эксперт |
|
ага сейчас вопрос зашел чуть глубже... а как связать бд mysql c сибилдером???!.. то есть суть вопроса вообще такова:
создаю программу на билдере в которой есть бд на mysql и далее есть бд на mysql на сервере.. с такими же таблицами. вот как это сделать? в общих чертах последовательность действий? заранее благодарен |
|
|
|
|
AlexRock Гуру |
|
Самый тупой простой способ - писать запросы на эскуэле к серверной БД и выбирать из неё данные, которые потом вставлять в клиентскую БД (там с типами данных, возможно, придётся разбираться). А если есть какие-то встроенные механизмы синхронизации, фреймворки (у того же Microsoft есть фреймворк, в котором даже для таких вот запросов надо объекты эскуэль запросов создавать, в которых сам запрос прописываешь, параметры нужные (типа строки соединения и пр.) и вызываешь функцию выполнения запроса), которые за вас всё настроят и все запросы напишут, а вам только указать несколько опций нужно будет, то это, как говорится, дополнительный плюс.
Ну, плюс логику синхронизации надо проработать. Типа, сначала запросить удаления, потом вставки, потом обновления. Или как-то по-другому, как вам надо. По каким параметрам сравнивать - например, по datetime, timestamp или что-то своё. |
|
|
|
|
leoboec Эксперт |
|
ага спасибо.. а можно поконкретнее как связать билдер и эскуэль через ADO а как именно не совсем понимаю логику соединения... как раз я так понимаю что после такого соединения и можно будет создавать таблицы и прочее не прописывая тупо запросы на эскуэль! именно это и хочу попытаться сделать |
|
|
|
|
AlexRock Гуру |
|
Я почти ничего не понимаю в этом деле, поэтому лучше изучить тебе чего-нибудь, книжки почитать. Вот готовый фреймворк для синхронизации БД. Вот достаточно подробные вебкасты, чтобы начать уже что-то делать самому. Там ещё внизу справа похожие доклады есть - тоже полезно. Я делал по этому докладу для своего проекта - были свои сложности, но всё, что там было, у меня в конце концов получилось.
Если у тебя не компактный фреймворк, то можно использовать LINQ to SQL - я его лучше знаю, чем SQL, да и удобнее мне с ним. Однако, там свои заморочки.
Как связать Билдер с АДО, я не знаю. Лучше использовать Вижуал Студио, по-моему. И лучше писать на C#, если ещё только определяешься в выборе языка для программирования под Виндоус. На СиШарпе просто проще, по-моему.
Не прописывая запросы эскуэль, ты сможешь создавать таблицы только в каком-нибудь редакторе для БД или через тот же LINQ, по-моему. Я просто создавал таблицу на сервере (под СУБД MS SQL Server) и либо с помощью WCF синхронизировал данные с клиентом (тогда локальная копия сервеной БД автоматом создаётся - там мастера пишут нужные запросы на копирование схемы сверерной БД и создания локальной БД по этой схеме), либо писал свои запросы с клиента на сервер для той же синхронизации, да хоть для чего.
Далее внизу примеры на СиШарп и дотНЕТ фреймворке.
Вот простое соединение с локальной БД в SQL Server Compact с использованием LINQ to SQL (вставка данных в таблицу):
Код: |
System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
private string connectionString = System.IO.Path.GetDirectoryName(a.Location) + @"\db.sdf";
CornIllnesses db = new CornIllnesses(connectionString);
Herbicides record = new Herbicides
{
Name = "Name",
ActiveAgentId = (from rec in db.ActiveAgents
where rec.Name == comboBox10.Text
select rec.Id).FirstOrDefault<int>()
};
db.Herbicides.InsertOnSubmit(record);
db.SubmitChanges(); |
Вот простое соединение с БД в SQL Server на сервере в Интернете с использованием ADO.NET и компактного фреймворка (считываю данные на сервере и вставляю их в клиентскую БД в виде sdf-файла, ещё листбокс заполняю):
Код: |
// Server connection data.
private string serverConnectionString = "";
private string serverDataSource = "192.168.0.1";
private string serverPort = "1433";
private string serverInitialCatalog = "db";
private string serverUserID = "sa";
private string serverPassword = "password";
// Client connection data.
private string clientConnectionString = "Data Source=" +
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) +
@"\db.sdf" +
";Password=password;";
// Initialize server connection string.
serverConnectionString =
"Data Source=" + serverDataSource +
"," + serverPort +
";Initial Catalog=" + serverInitialCatalog +
";User ID=" + serverUserID +
";Password=" + serverPassword + ";";
List<string> guids = new List<string>();
List<string> names = new List<string>();
string query = "SELECT id, name FROM Table1 ORDER BY name";
SqlCommand command = new SqlCommand(query, serverConnection);
SqlDataReader dr = command.ExecuteReader();
serverConnection.Open();
while (dr.Read())
{
guids.Add(dr["id"].ToString());
names.Add(dr["name"].ToString());
}
dr.Close();
serverConnection.Close();
SqlCeConnection clientConnection = new SqlCeConnection(clientConnectionString);
clientConnection.Open();
for(int i = 0; i < guids.Count; i++)
{
string query1 = "INSERT into Table1 (guid, name) values ('" +
guids[i] + "', '" +
names[i] + "')";
SqlCeCommand command1 = new SqlCeCommand(query1, clientConnection);
command1.ExecuteNonQuery();
}
// Reading data from local database and filing the clientDataListBox.
clientDataListBox.Items.Clear();
string query = "SELECT name FROM Table1";
SqlCeCommand command = new SqlCeCommand(query, clientConnection);
SqlCeDataReader dr = command.ExecuteReader();
while (dr.Read())
{
clientDataListBox.Items.Add(dr["name"].ToString());
}
dr.Close();
clientConnection.Close(); |
Как-то так. Надёргал последовательно кода из разных обработчиков, поэтому конфликты имёт могут быть, например, между одноимёнными SqlCeCommand или SqlCeDataReader, но тут надо просто назвать их по-разному. |
|
|
|
|
leoboec Эксперт |
|
с языком уже точно решено что это билдер.. просто я его хоть немного но знаю.. на сишарп к сожалению времени сейчас нет... за подсказки спасибо )) будем смотреть может быть по аналогии действовать... вопросы будут еще задам |
|
|
|
|
AlexRock Гуру |
|
leoboec писал(а): |
с языком уже точно решено что это билдер.. просто я его хоть немного но знаю.. на сишарп к сожалению времени сейчас нет. |
Язык - Билдер? Билдер - это от бывшей Борланд?
...Что-то вы намешали всё в кучу: ADO, Builder, MySQL, Paradox, C. По мне, так если используешь технологии какой-то одной фирмы, то лучше её до конца использовать, а не мешать СУБД от одних, технологию доступа к данным от других, среду программирования от третьих и язык от четвёртых - будет куча проблем и нестыковок, которых при использовании продуктов только одной стороны не будет. Например, для использования синхронизации БД с помощью WCF надо писать свои классы для СУБД не MS SQl Server. |
|
|
|
|
leoboec Эксперт |
|
Си Билдер это в данном случае язык программирования ADO это компоненты си билдера для связи с бд... paradox это как бы бд по умолчанию в билдере.. но сейчас от этого отошел решил что буду mysql использовать и в билдере и на сервере... к сожалению сейчас о глубоком изучении речи не идет.. так как надо сделать дипломку... если понравится буду развивать проект нет так нет... воот.. сейчас стоит проблема по настройки драйвера odbc поэтому кто может подскажите |
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|