14. juli 2008 - 09:31Der er
33 kommentarer og 1 løsning
Data skal hentes efter tryk på "Søg" knap
hej , for at sige det med det samme har jeg ikke så meget styr på C# eller programmeringen, men jeg har i Visual Studio 2008 express lavet en windows form hvor man bl.a kan skrive en "Titel" ind i et felt og så herefter trykke på en "Søg"knap ved siden af hvor den så skulle ( hvis det er rigtig det jeg har lavet ) vise resultatet i en listbox , jeg har lavet plads til nedenunder.
Data'ene skal jeg vel først have defineret et eller andet sted ?
Du skal have et datalager af en eller anden slags. De mest almindelige måder at gemme data på, er at have en relationel database, en xml fil eller en tekstfil. Men data kan også komme fra en excel fil, et openoffice calc dokument, eller hvilket som helst anden datakilde.
Hvis du er helt ny i programmering, og du ikke har arbejdet med relationelle databaser før, kan du jo starte med en xml-fil. Relationelle databaser er dog det som give bedst performance, og er i de fleste tilfælde det som bliver brugt i større projekter.
Her kommer et kodeeksempel. I eksemplet har jeg en Excel 2007 fil, som hedder "c:\temp\test.xlsx". I denne excelfil har jeg et ark som hedder "Ark1", hvori der er en kolonne som hedder "value", hvor jeg har lagt nogle værdier.
Her er noget eksempelkode som søger efter teksten fra din titel tekstboks (i eksemplet er navnet på teksboksen "textBox1"), og viser resultatet i en listbox (listBox1)
command.CommandText = "select * from [Ark1$] where titel like @seachString"; command.Parameters.Add(new OleDbParameter("@seachString", "%" + this.textBox1.Text + "%")); OleDbDataAdapter adapt = new OleDbDataAdapter(command);
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace Filmliste { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
command.CommandText = "select * from [Ark1$] where titel like @seachString"; command.Parametersl.Add(new OleDbParameter("@seachString", "%" + this.textBox1.Text + "%"));
OleDbDataAdapter adapt = new OleDbDataAdapter(command);
Fik tilføjet linien og kørt det igennem igen, men så ved linien adapt.fill(dt); får jeg et vindue op hvor der står fl.g: "OleDbException was unhandled" ( Den installerbare ISAM kan ikke findes ). adapt.fill(dt); er markeret med gult og der er en gul pil ud for denne linie
hej ebea . Jo der er en del at skrive, men tænkte nu ville jeg bare prøve det første foreslag da jeg allerede havde fået skrevet lidt indtil jeg så den kode du var kommet med.
Jeg har lavet en UserForm i Excel hvor der lagres 7 forskellige info's fra input i TextBoxe, med VBA. Og som jeg næsten kan se af din kode, skal du gemme nogle filmtitler og andet, og det kan du gøre meget nemt med samme type TextBoxe, hvor du både kan lægge data til Regnearket (databasen) og hente samme data tilbage, hvis du skal finde en bestemt info.
ebea: Dit eksempel fylder 8 linjer VB kode, mit eksempel fylder 9 linjer C# kode. Hvis det er 1 linje kode som afgøre om man skal bruge en Excel-makro eller en Windows App skrevet i C#, så har man fokus helt forkert sted. Hvis man ønsker at lave en Form i Excel, kan man bruge dit eksempel. Hvis man ønsker at skrive et Windowsprogram som bruger Excel som database, kan man bruge mit eksempel.
Fordelene ved at bruge Visual Studio og C# er mange. F.eks. kan dit program virke uden at have Excel installeret. En anden fordel er, at hvis du forstår ADO.NET (frameworket som bliver brugt i mit kodeeksempel), kan du forbinde til enhver database, og vise og behandle data uden at skulle lære et nyt sprog eller framework hver gang.
hej aaberg , jeg har hentet ODBC driveren, genstartet programmerne, men får stadig en OleDbException was unhandled ( Den installerbare ISAM kan ikke findes ) ved adapt.Fill(dt); - linien
aaberg_cc: Det var nu ikke selve antallet af kodelinier, jeg tænkte så meget på. Men mere at det for en nybegynder nemt kan komme til at virke uoverskueligt med DB Connections og andet, når man egentlig kan lave det hele i Excel. Han skal jo formentlig ikke lave en database til at styre voldsomt store datamængder, og så er Excel jo ganske udmærket et langt stykke hen af vejen, for di han kan lave UserForm's og andet med VBA.
Prøv at skifte følgende linje: OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
ud med: OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Filmliste.xlsx;Extended Properties=Excel 8.0");
har skiftet linien ud, men den giver stadig samme error. Den bliver ved med at sætte en gul pil ud for linien adapt.Fill(dt) og så fremkommer der i et lille vindue "OleDbException was unhandled"
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb;
namespace Filmliste { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
command.CommandText = "SELECT * from [Ark1$] where titel like @searchString"; command.Parameters.Add(new OleDbParameter("@searchString", "%" + this.textBox1.Text + "%"));
OleDbDataAdapter adapt = new OleDbDataAdapter(command);
Er fejlen stadig "Den installerbare ISAM kan ikke findes"?
ebea: Hvis du kun skal lave en simpel filmliste, så giver jeg dig ret i at det kan være ok at lave den som en Excel-makro. Hvis du derimod laver en filmliste for at lære at programmere, eller fordi man i fremtiden har flere planer med programmet, så er en Windows app nok et bedre valg. Det kan jo være at der er en grund til at dette spørgsmål findes under C# kategorien, og ikke Excel kategorien.
den kommer godtnok stadig op med en "OleDbException was unhandled" men nu med beskeden :"Der er ikke angivet nogen værdier for en eller flere krævede parametre". adapt.fill(dt); er stadigvæk markeret med gult
Error 1 'System.Data.OleDb.OleDbCommand' does not contain a definition for 'ParametersAdd' and no extension method 'ParametersAdd' accepting a first argument of type 'System.Data.OleDb.OleDbCommand' could be found (are you missing a using directive or an assembly reference?)
Det betyder at den ikke finder en kolonne med navnet "titel" i "Ark1" arket.
Sørg for at navnet på kolonnen i excel er stavet helt ens med navnet i command.CommandText propertien. Derudover er det vigtigt at kolonnen i Excel er på række 1 (Altså den øverste kolonne). Du kan godt have flere kolonner, men den første kolonne skal være på kolonne A i Excel (Altså den første kolonne). Arket skal også staves på samme måde i Excel og i kommandoen i C# koden.
Så lykkedes det aaberg ! . Fik sat punktum mellem Parameters og Add . Og så fik jeg rettet mit Excel dokument til så jeg har Titelerne i først kolonne og det kører rigtig godt. Nu fortjener du vist også at få de points ! Selvom de burde ha været meget mere :) .
ja det er super når man ser det virke :)...nu kan jeg så prøve at rode med et par flere funktioner inden jeg måske kommer herind igen ;) ( Det ku jo godt være hehe ;) ) ... men tusind Tak :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.