Zitat von
GuenterS:
Anscheinend muss man, wenn man auf die Unterstützung vom Studio nicht bauen kann, die Spalten manuell einfügen und auch das Feld für die Datenbindung ausfüllen.
Neeee!
Einfach irgendwo die Eigenschaft AutogenerateColumns auf true setzen.
Die ist dafür da, damit deine
Design-Time Einstellungen nicht immer überschrieben werden.
Ohne Designtime macht das natürlich wenig Sinn.
Zitat:
Warum der Verbindungsaufbau aber dermaßen langsam ist, ist mir nach wie vor ein Rätsel. Ich hab die sekunden mal gezählt und komme auf 15-20 ... irgendwie nicht gerade flott.
Dein Connectionstring sieht aus als hättest du in deinem Orahome\Network\Admin keine TNSNames.ora mit den Einstellungen für deine
DB hinterlegt.
Eine
IP anzugeben heißt, dass er durch etliche Mögliche Settings fällt bevor er es irgendwann versucht auf die Default
DB der Maschine zuzugreifen.
Eine Möglichkeit ohne TNSNames.ora siehst du in dem abstrakten Bleistift unten.
Da siehst du außerdem wie du eine Conenction kriegen kannst ohne gegen einen speziellen Provider zu kompilieren. Und wie du wo "using" nutzen kannst damit du a) nicht in Finalizer rennst und b) keine Conenction unnötig lange aufgehalten wird.
Und c) ein kleiner Tip, damit der GridView nicht so EXTREEEEM langsaaaaam ist (DoubleDBuffered ist in .Net leider protected
)
Das da unten geht schneller auf als ein Maikäfer husten kann. Du kannt auch den ODP von Oracle installieren.
Der öffnet Connection signifikant schneller als die Krücke von MSFT, dafür musst du dann deine
App.config anpassen um ihn nutzen zu können.
(KEIN Delphi code)
Delphi-Quellcode:
type
DoubleBufferedDataGridView =
class(DataGridView)
protected
method CreateHandle;
override;
end;
method DoubleBufferedDataGridView.CreateHandle;
begin
DoubleBuffered := true;
inherited;
end;
class method ConsoleApp.Main;
begin
var dt := new DataTable();
var factory := DbProviderFactories.GetFactory("System.Data.OracleClient");
using conn := factory.CreateConnection()
do
begin
conn.ConnectionString := "Persist Security Info=True;User ID=deinUser;Password=deinPasswort;"+
"Data source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=
TCP)"+
"(HOST=
localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DeineDB)))";
conn.Open();
using cmd := conn.CreateCommand()
do
begin
cmd.CommandText := "select * from all_users";
using rdr := cmd.ExecuteReader()
do
dt.Load(rdr);
end;
end;
Application.EnableVisualStyles();
using frm := new Form()
do
begin
var dgv := new DoubleBufferedDataGridView();
dgv.Dock := DockStyle.Fill;
dgv.AutoSizeColumnsMode := DataGridViewAutoSizeColumnsMode.AllCells;
dgv.AutoGenerateColumns := true;
dgv.DataSource := dt;
frm.Controls.Add(dgv);
frm.ShowDialog();
end;
end;