Avatar billede Slettet bruger
10. august 2006 - 19:42 Der er 20 kommentarer og
2 løsninger

Søgenøgle

I mit simple administrationsprogram har jeg et tekstfelt hvori indholdet af min Access database står når jeg starter siden op! Hvis
jeg ønsker at redigere i indholdet får jeg en fejlmedddelse som jeg aldrig har set før!

System.Data.OleDb.OleDbException: Søgenøglen blev ikke fundet i nogen poster.

Herunder er vist hele mit script! Fejlen er vist med en pil (<---) indikere at scripte ikke formår at behandle indholdet i min database.


private void opdater(Object sender, System.Web.UI.WebControls.CommandEventArgs e) { 
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    String ID = e.CommandArgument.ToString();
    OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../db/content.mdb")+";");
    OurCommand = new OleDbCommand("UPDATE online SET tekst = @tekst", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 200000).Value = elm1.Text;
    OurConnection.Open();
    OurCommand.ExecuteNonQuery();<---
    OurConnection.Close();
}

Scriptet er en copy/paste af et allerede fungerende script fra et andet site
Avatar billede arne_v Ekspert
10. august 2006 - 19:51 #1
to ting springer i oejnene paa mig

ingen WHERE d.v.s. at du vil opdatere alle rows ??

en VARCHAR som er 200000 lang ??

men jeg kan ikke lige se at de skulle betyde noget for fejlen
Avatar billede Slettet bruger
10. august 2006 - 20:14 #2
Der findes kun den ene row (tekst) Det er ét stort tekstfeldt som jeg skriver en hel sides tekst i! Vil det være en idé at sætte et id ind og give den et primary key selvom der kun bliver redigeret i tabellen, og intet nyt oprettet?
Avatar billede Slettet bruger
10. august 2006 - 20:22 #3
En anden ting som forvirrer mig er at når jeg starter med en frisk tabel virker det upåklageligt i starten, men efter en vis mængde (mit gæt) i databasen eller 2-3 gange redigering går den i sort men dén fejlmeddelse...
~:]
Avatar billede Syska Mester
10. august 2006 - 21:58 #4
Det lyder mere som fejl 40 så .... der bliver jo ikke ændre noget ....

Men ja, smid en primær nøgle på, og en where clause på ...

og så ville jeg nok bruge typen "Text" til din side i stedet for en varchar, når den alligevel skal være så stor.

// ouT
Avatar billede Slettet bruger
11. august 2006 - 20:04 #5
Ændrede scriptet efter anbefalingen så det ser således ud nu:

public void opdater(Object sender, System.Web.UI.WebControls.CommandEventArgs e) { 
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    String id = e.CommandArgument.ToString();
    OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../db/content.mdb")+";");
    OurCommand = new OleDbCommand("UPDATE online SET tekst = @tekst, id = @id WHERE id = ", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 20000).Value = elm1.Text;
    OurConnection.Open();
    OurCommand.ExecuteNonQuery();
    OurConnection.Close();
}

id er et nyt row i min tabel som er primær nøgle og sat til autonummering!

Men denne gang får jeg en anderledes fejlmeddelse, der indikere at min "Where" clause er forkert! Hvordan bør den så se ud?


System.Data.OleDb.OleDbException: Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "id =".
Avatar billede arne_v Ekspert
11. august 2006 - 20:13 #6
proev:

    OurCommand = new OleDbCommand("UPDATE online SET tekst = @tekst WHERE id = id", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 20000).Value = elm1.Text;
    OurCommand.Parameters.Add("@id", OleDbType.Integer).Value = 1;
Avatar billede Slettet bruger
12. august 2006 - 09:14 #7
Back to begining! Stadig samme problem med søegenøglen ~:[

Et eksempel er uploaded på nedenstående adresse...

Det er filen online_cv.aspx i mappen admin

http://www.robin-hansen.dk/upload/soegenogle.zip
Avatar billede Syska Mester
12. august 2006 - 14:07 #8
samme som?

Smid din compile/exception her igen ... der må være en løsning uden vi skal til at hente din kode ....

// ouT
Avatar billede Slettet bruger
13. august 2006 - 02:09 #9
Her er et sampel af hele min kode. Bemærk at det javascript som er defineret hendviser til et textredigerings script som kan hentes på http://tinymce.moxiecode.com/

<%@ Page Language="C#" ContentType="text/html" ValidateRequest="false" debug="true" %>
<%@ import namespace="System.IO"%>
<%@ import namespace="System.Data"%>
<%@ import namespace="System.Data.OleDb"%>
<script runat="server">
void Page_Load(Object Sender, EventArgs E) {

            if (!IsPostBack){   
            OleDbConnection OurConnection;
            OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../db/content.mdb")+";");
            OurConnection.Open();
            OleDbCommand OurCommand;
            OleDbDataReader OurDataReader;               
            OurCommand = new OleDbCommand("SELECT * FROM online",OurConnection);
            OurDataReader = OurCommand.ExecuteReader();
            OurDataReader.Read();
            elm1.Text = OurDataReader["tekst"].ToString();
            OurConnection.Close();
            OurDataReader.Close();           
            }
        }
public void opdater(Object sender, System.Web.UI.WebControls.CommandEventArgs e) { 
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    String id = e.CommandArgument.ToString();
    OurConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../db/content.mdb")+";");
    OurCommand = new OleDbCommand("UPDATE online SET tekst = @tekst WHERE id = id", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 20000).Value = elm1.Text;
    OurCommand.Parameters.Add("@id", OleDbType.Integer).Value = 1;    OurConnection.Open();
    OurCommand.ExecuteNonQuery();
    OurConnection.Close();
}    
</script>
<html>
<head>
<title>Online CV</title>
<!-- TinyMCE -->
<script language="javascript" type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
    tinyMCE.init({
        mode : "textareas",
        theme : "advanced",
        plugins : "style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,flash,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable",
        theme_advanced_buttons1_add_before : "save,newdocument,separator",
        theme_advanced_buttons1_add : "fontselect,fontsizeselect",
        theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,separator,forecolor,backcolor",
        theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator,search,replace,separator",
        theme_advanced_buttons3_add_before : "tablecontrols,separator",
        theme_advanced_buttons3_add : "emotions,iespell,flash,advhr,separator,print,separator,ltr,rtl,separator,fullscreen",
        theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        theme_advanced_path_location : "bottom",
        content_css : "example_full.css",
        plugin_insertdate_dateFormat : "%Y-%m-%d",
        plugin_insertdate_timeFormat : "%H:%M:%S",
        extended_valid_elements : "hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
        external_link_list_url : "example_link_list.js",
        external_image_list_url : "example_image_list.js",
        flash_external_list_url : "example_flash_list.js",
        file_browser_callback : "fileBrowserCallBack",
        theme_advanced_resize_horizontal : false,
        theme_advanced_resizing : true
    });

    function fileBrowserCallBack(field_name, url, type, win) {
        // This is where you insert your custom filebrowser logic
        alert("Example of filebrowser callback: field_name: " + field_name + ", url: " + url + ", type: " + type);

        // Insert new URL, this would normaly be done in a popup
        //win.document.forms[0].elements[field_name].value = "someurl.htm";
    }
</script>
<!-- /TinyMCE -->
</head>
<body>
<form enctype="multipart/form-data" runat="server">
<table width="980" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="655"><asp:TextBox ID="elm1" TextMode="MultiLine" Width="400" Height="200" runat="server" /></td>
</tr>
  <tr>
    <td width="319""><asp:Button ID="rediger" style="background-color: #FFFFFF;border: 0px; text-decoration:underline" oncommand="opdater" Text="Opdater" runat="server" /></td>
</tr>
</table>
</form>
</body>
</html>
Avatar billede arne_v Ekspert
13. august 2006 - 03:24 #10
prøv:

    OurCommand = new OleDbCommand("UPDATE online SET tekst = ? WHERE id = ?", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 20000).Value = elm1.Text;
    OurCommand.Parameters.Add("@id", OleDbType.Integer).Value = 1;
Avatar billede Slettet bruger
13. august 2006 - 11:00 #11
Gjorde ingen forskel - stadig samme errormeddelse!

System.Data.OleDb.OleDbException: Søgenøglen blev ikke fundet i nogen poster.

*sight*
Avatar billede arne_v Ekspert
14. august 2006 - 04:07 #12
og du har en record med id=1 ?
Avatar billede Slettet bruger
14. august 2006 - 12:01 #13
Ja det skulle jeg da mene! -den er sat til autonummering - selvom der ikke bliver oprettet andre, men kun redigeret i denne ene...
Avatar billede Slettet bruger
14. august 2006 - 15:34 #14
Har prøvet at søge under "hjælp" i access på problemet og her er hvad jeg fik:

Søgenøglen blev ikke fundet i posterne. (Fejl 3709)
Denne fejl opstår, når en ISAM SEEK udføres, og der ikke findes tilsvarende værdier i indekset.

indeks
En dynamisk krydsreference på et eller flere tabeldatafelter (kolonner), der giver mulighed for hurtigt at hente bestemte poster fra en tabel. Efterhånden som poster tilføjes, ændres eller slettes, vil databasestyringssystemet automatisk opdatere indekset, så det afspejler ændringerne.

Når det aktuelle indeks anvendes sammen med et Recordset-objekt af typen tabel, bestemmer det den rækkefølge, som dataposter returneres i til Recordset. En tabel kan indeholde flere indeks til de tilhørende data.

Et DAO-Indeks-object repræsenterer et indeks for et TableDef-objekt.
Avatar billede arne_v Ekspert
14. august 2006 - 18:45 #15
hvis du aabner MDB filen med Access kan du saa se et 1 tal i id kolonnen ?
Avatar billede Slettet bruger
14. august 2006 - 20:24 #16
Hvis det er dette du mener, så ja! http://www.robin-hansen.dk/sogenogle.jpg

Hvis jeg laver en frisk tabel kaldet 'online' med 'id'(primær nøgle) og 'tekst' indsat, kan jeg sagtens skrive noget ind i databasen! Hvis jeg så ønsker at redigere i dette eller at tilføje noget til er det jeg får fejlmeddelsen...
Avatar billede arne_v Ekspert
15. august 2006 - 00:39 #17
ja

jeg er ved at være løbet tør for gode ideer
Avatar billede Syska Mester
15. august 2006 - 03:18 #18
OurCommand = new OleDbCommand("UPDATE online SET tekst = ? WHERE id = ?", OurConnection);
    OurCommand.Parameters.Add("@tekst", OleDbType.VarChar, 20000).Value = elm1.Text;
    OurCommand.Parameters.Add("@id", OleDbType.Integer).Value = 1;

Det har ik' noget at gøre med det ene er "@" og det andet "?" ????

Har du lavet den Autonummering til Index eller Primær nøgle eller noget i din db?
Avatar billede Slettet bruger
23. august 2006 - 12:03 #19
Her er situationen som det ser ud. Hvis jeg sletter tabellen online og laver en hel frisk identisk med den gamle, kan jeg skrive og redigere i tekstfeltet alle de gange jeg har lyst SÅ LÆNGE browseren er åben.

Eftersom redigeringsscriptet er copy-paste af et script som virker upåklageligt, kan jeg ikke se andre grunde end at det er TINY MCE (http://tinymce.moxiecode.com/) som jammer det hele.

Jeg har erstatet filen med en .html fil med fixed text og er gået helt fra at bruge redigeringsscriptet.

Siden I begger aktive har prøvet at hjælpe synes jeg I begge skal smide et svar og I vil derfor dele pointene...
Avatar billede Syska Mester
23. august 2006 - 13:34 #20
svar
Avatar billede arne_v Ekspert
24. august 2006 - 04:06 #21
ok

buzzzz>

du skal ramme den lille cirkel ude til venstre

:-)
Avatar billede Syska Mester
24. august 2006 - 07:49 #22
ups :-s
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester