Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизКак грамотно закрыть базу данных? Найти похожие ветки
← →
Lizka © (2004-08-09 13:13) [0]Я делаю так:
with Conn.Connection do begin ADOQueryTown.Close; ADOQueryFinPr.Close; ADOQueryPr.Close; ADOConnection.Connected := false; end; close;
Но выдается окошко CPU и после этого приходится делать Programm Reset :(
← →
sniknik © (2004-08-09 13:44) [1]достаточно этого
ADOConnection.close; (запросы к этому конекту привязаны?)
close;
но ошибка вряд ли в закрытии, скорее в другом.
← →
46_55_41_44 © (2004-08-09 13:47) [2]Слушай Conn.Connection - это что такое?
← →
Lizka © (2004-08-09 13:58) [3]Это DataModel в котором содержатся все запросы и ADOConnect.
И даже если просто писать
ADOConnection.close; (запросы к этому конекту привязаны?)
close;
то все-равно такая ошибка. А запросы к коннекту привязаны
← →
46_55_41_44 © (2004-08-09 14:08) [4]А ты попробуй так
Conn.ADOConnection.Close;
← →
Lizka © (2004-08-09 14:18) [5]нет. Не помогло. Ошибка такая
ntdll.RtlQueryInformationAcl:77F813BA push ebp
← →
46_55_41_44 © (2004-08-09 14:27) [6]Наверно Conn это DataModule, а не DataModel.
А ты посмотри, есть ли у тебя в файле "Название твоего проекта".dpr строчки типа
begin
Application.Initialize;
Application.CreateForm(TConn, Conn);
...
Application.Run;
end.
← →
Lizka © (2004-08-09 14:28) [7]Да, есть. Это может зависить от того, что допустим Service Pack поставить?
← →
46_55_41_44 © (2004-08-09 14:34) [8]пробовала перезагрузку делать?
Иногда бывает и такое! попробуй... не поможет придумаем, что нибудь еще...
← →
Lizka © (2004-08-09 14:40) [9]Не помогло :(
← →
sniknik © (2004-08-09 14:42) [10]> то все-равно такая ошибка. А запросы к коннекту привязаны
даже не сомневался.
> Да, есть. Это может зависить от того, что допустим Service Pack поставить?
не поможет. нужно глюки из программы убрать. а сначала найти... но это не на закрытии (если конечно ты не делаеш его там где датамодуль уже уничтожился)
← →
46_55_41_44 © (2004-08-09 14:45) [11]Слушай, а твой Адо коннекш прям так и называется - ADOConnection?
Если да.. То попробуй поменять имя... может ADOConnection - это какое-то зарезервированное слово! А если нет... ТО тем более! потому что получается, что у тебя просто нет объекта с таким назваением...
← →
Lizka © (2004-08-09 14:45) [12]Если даже просто оставляешь close, всё-равно ругается...
← →
46_55_41_44 © (2004-08-09 14:47) [13]Ответь на мой вопрос!
← →
Lizka © (2004-08-09 14:48) [14]>Слушай, а твой Адо коннекш прям так и называется - ADOConnection?
Да. Заменила - не помогло
← →
46_55_41_44 © (2004-08-09 15:08) [15]Слушай перешли мне часть своего проекта... Или весь... Я посмотрю... Интересно стало!!!
f_aslanov@hotmail.com
Возможно ты где-то убиваешь датамодуль Conn.
← →
Lizka © (2004-08-10 06:20) [16]unit FinProduct;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DBGrids, DBCtrls, ExtCtrls, DB, ADODB;
type
TFinProdApplication = class(TForm)
DBNavigator: TDBNavigator;
DBLCBTown: TDBLookupComboBox;
DBLCBPr: TDBLookupComboBox;
DBGridFinPr: TDBGrid;
GroupBox: TGroupBox;
BBShow: TBitBtn;
BBAdd: TBitBtn;
BBDelete: TBitBtn;
LabelTown: TLabel;
LabelPr: TLabel;
BBExit: TBitBtn;
procedure BBShowClick(Sender: TObject);
procedure BBExitClick(Sender: TObject);
procedure DBGridFinPrDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FinProdApplication: TFinProdApplication;
implementation
uses Conn, FinProductInfo;
{$R *.dfm}
procedure TFinProdApplication.BBShowClick(Sender: TObject);
var gorod, progr: String;
begin
gorod:=DBLCBTown.Text;
progr:=DBLCBPr.Text;
with Conn.Connection do
begin
ADOQueryFinPr.SQL.Text :="select f.FP_NAME from fin_product f, (select pr.pr_id, g.g_id from info i,progr pr, gorod g where g.g_name = :gorod and i.g_id = g.g_id and pr.pr_id = i.pr_id and pr.pr_name = :progr ) p_id where f.pr_id = p_id.pr_id and p_id.g_id = f.G_ID";
ADOQueryFinPr.Parameters[0].Value:=gorod;
ADOQueryFinPr.Parameters[1].Value:=progr;
ADOQueryFinPr.Open;
ADOQueryFinPr.Active:=True;
end;
end;
procedure TFinProdApplication.BBExitClick(Sender: TObject);
begin
if Conn.Connection.MainADOConnection.Connected then
begin
with Conn.Connection do
begin
ADOQueryTown.Active := false;
ADOQueryPr.Active := false;
ADOQueryFinPr.Active := false;
MainADOConnection.KeepConnection := false;
end;
end;
close;
end;
procedure TFinProdApplication.DBGridFinPrDblClick(Sender: TObject);
begin
FinProductInfo.SecondFinPrApplication.Show;
end;
end.
← →
Lizka © (2004-08-10 06:22) [17]и вторая форма:
unit FinProductInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Grids, DBGrids, ExtCtrls, Buttons;
type
TSecondFinPrApplication = class(TForm)
GroupBoxInfo: TGroupBox;
BBtnDelete: TBitBtn;
BBtnAdd: TBitBtn;
DBNavigator: TDBNavigator;
DBGrid: TDBGrid;
DBText1: TDBText;
LabelFinPr: TLabel;
BBtnClose: TBitBtn;
procedure BBtnCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SecondFinPrApplication: TSecondFinPrApplication;
implementation
uses Conn;
{$R *.dfm}
procedure TSecondFinPrApplication.BBtnCloseClick(Sender: TObject);
begin
if Conn.Connection.MainADOConnection.Connected then
begin
with Conn.Connection do
begin
ADOQueryInfo.Active := false;
end;
end;
hide;
end;
end.
← →
sniknik © (2004-08-10 08:07) [18]ну а где самое интересное, где дата(?)модуль с кучей переопределенных событий у запросов и конекта?
хотя правильно, нафиг, в чужом коде ковырятся, хуже нет.
← →
46_55_41_44 © (2004-08-10 08:22) [19]Давай датамодуль...
А еще лучше перещли весь проект на мое мыло!
Он мне нужен как собаке 5 нога, если ты боишься, что я что-то там украду )))
Просто я на самом деле помочь хочу!!!
← →
Lizka © (2004-08-10 08:52) [20]переслала
← →
Lizka © (2004-08-10 08:56) [21]Только он у меня перестал открываться. Говорит StackOverflow и вся дельфя сворачивается :(
Я ничего не понимаю... Но думаю, что это из-за некорректного закрытия базы
← →
46_55_41_44 © (2004-08-10 09:18) [22]Солнышкооо... Я нашел!!! :)))
Слушай мой тебе совет, если пишешь что-нибудь стоящее по сделай с MainForm-ом...
А ошибка твоя вот в чем:
begin
Application.Initialize;
Application.CreateForm(TFinProdApplication, FinProdApplication);
Application.CreateForm(TConnection, Connection); Application.CreateForm(TSecondFinPrApplication, SecondFinPrApplication);
Application.Run;
end.
а надо, чтобы было вот так:
begin
Application.Initialize;
Application.CreateForm(TConnection, Connection);
Application.CreateForm(TFinProdApplication, FinProdApplication); Application.CreateForm(TSecondFinPrApplication, SecondFinPrApplication);
Application.Run;
end.
дело в том, что форма TFinProdApplication открывалась модально! Значит TConnection еще не создается... Так как Компилятор останавливается на строчке Application.CreateForm(TFinProdApplication, FinProdApplication);!!! Следовательно ты пытаешься закрыть, то что еще не открыла!
← →
Lizka © (2004-08-10 09:26) [23]Знаешь, я переставила это местами и ничего не поменялось...
Такая же ошибка...
← →
46_55_41_44 © (2004-08-10 09:29) [24]Тогда сделай форму FinProdApplication FormStyle - fsMDIForm!
← →
46_55_41_44 © (2004-08-10 09:30) [25]У меня тоже ошибку выдавало... Я сделал так, как тебе сказал!!! И все нормально заработало!
← →
46_55_41_44 © (2004-08-10 09:33) [26]program FinPr;
uses
Forms,
FinProduct in "FinProduct.pas" {FinProdApplication},
Conn in "Conn.pas" {Connection: TDataModule},
FinProductInfo in "FinProductInfo.pas" {SecondFinPrApplication};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TConnection, Connection);
Application.CreateForm(TFinProdApplication, FinProdApplication);
Application.CreateForm(TSecondFinPrApplication, SecondFinPrApplication);
Application.Run;
end.
Вот так надо сделать! Скопируй это в FinPr.dpr
← →
Lizka © (2004-08-10 09:36) [27]А у тебя у всех Query Active = false стоит? У меня когда так - всё тоже работает
← →
46_55_41_44 © (2004-08-10 09:39) [28]Я ничего твоего не меняю!
но у меня же нет Oracle и тем более базы с твоей конфигурацией!
Ты точно все делаешь как я тебе говорю????
← →
Lizka © (2004-08-10 09:41) [29]посмотри active. тк у тебя нет базы, то у MAainADOConnection.Connected = false и у всех Query.Active = false. И поэтому всё работает.
Я всё сделала, так как ты сказал
begin
Application.Initialize;
Application.CreateForm(TConnect, Connect);
Application.CreateForm(TFinProductApplication, FinProductApplication);
Application.CreateForm(TFinProductSecondApplication, FinProductSecondApplication);
Application.Run;
end.
← →
46_55_41_44 © (2004-08-10 09:50) [30]попробуй сделать MAainADOConnection.Mode ---> cmShareDenyNone прям в Object Inspektor
← →
Lizka © (2004-08-10 10:11) [31]Знаешь, я сделала тоже самое на С Builder 6 + сервис паки 1,2 и там такой ошибки не возникло... Т.е. просто надо их найти... Ты случайно не знаешь - где?
← →
46_55_41_44 © (2004-08-10 10:14) [32]сервис паки 1,2? нет честно говоря не знаю!
← →
Lizka © (2004-08-10 10:37) [33]а ты что-нибудь ставил на Дельфи?
← →
46_55_41_44 © (2004-08-10 10:41) [34]Да нет... ничего такого, чего у тебя нет! Стандартный пакет
← →
Lizka © (2004-08-10 10:58) [35]А ты тестируешь на бд или без неё? У тебя вообще есть бд?
← →
46_55_41_44 © (2004-08-10 11:27) [36]Есть конечно есть... Правда не Oracle как у тебя...
Просто любую базу подставил ... и все
← →
Lizka © (2004-08-10 11:28) [37]Наверно у тебя по умолчанию они уже были... Сейчас попробую установить и напишу о результатах
← →
Danilka © (2004-08-10 11:29) [38][35] Lizka © (10.08.04 10:58)
К Ороклу через АДО? Честно говоря, никогда не пробовал. Возможно проблема не в Дельфи и не в программе, а в драйверах.
← →
46_55_41_44 © (2004-08-10 11:34) [39]ОК...
Проблема не в драйверах... В самой программе это однозначно!
← →
Danilka © (2004-08-10 11:36) [40][39] 46_55_41_44 © (10.08.04 11:34)
Откуда такая уверенность?
Страницы: 1 2 3 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.033 c