HELP!  RETURN CLOB from External DLL

Hi
I am working on an External DLL using OCI. Basically, PL/SQL
calls an
External DLL to process the data and then returns LOB back to
the PL/SQL
procedure. Inside the DLL, I created a Temporary lob to process
the data.
The error is prompted from PL/SQL:
SQL> exec isdb.test_clob;
Before original length=10
ORA-24805: LOB type mismatch
ORA-06512: at "ISDBSVR.ISDB", line 24
ORA-06512: at "ISDBSVR.ISDB", line 29
ORA-06512: at line 1
So far I know that error is caused by the return from PLS_CLOB
is not clob.
"After_original := PLS_CLOB(before_original); {you will see more
code in the
below}" However inside the DLL, I have defined OCIClobLocator
and
OCI_TEMP_CLOB to carry the CLOB data.
I have found the following observations:
1. If I change everything to blob, it works fine. (such as
OCILobLocator,
OCI_TEMP_CLOB and all variables in PL/SQL)
2. If I run the same DLL and PL/SQL in 9i, it works fine (clob
too)
I guess it would be a bug for clob, please help to check thanks
-- CODE - PL/SQL
CREATE OR REPLACE PACKAGE BODY "ISDBSVR"."ISDB"
as
Function PLS_CLOB(var_clob in clob)
RETURN clob IS
EXTERNAL LIBRARY bb
WITH CONTEXT
NAME "Encrypt_Blob"
LANGUAGE C
PARAMETERS
CONTEXT,
var_clob,
var_clob INDICATOR SB4,
RETURN INDICATOR SB4
PROCEDURE TEST_CLOB IS
before_original cLOB;
After_original cLOB;
CHAR_TO_CLOB varchar(200);
bsize int;
BEGIN
CHAR_TO_CLOB := 'AAAAAAABBBBBBCCCCCCC';
dbms_lob.createtemporary( before_original, TRUE );
DBMS_LOB.write( before_original,10,1,CHAR_TO_CLOB);
bSize := DBMS_LOB.GetLength(before_original);
DBMS_OUTPUT.PUT_LINE('Before original length='||bSize);
After_original := PLS_CLOB(before_original);
bSize := DBMS_LOB.GetLength(After_original);
DBMS_OUTPUT.PUT_LINE('After original length='||bSize);
dbms_lob.freetemporary(before_original);
END;
END ISDB;
/* CODE - DLL */
EXPORT OCILobLocator * EncryptBlob(OCIExtProcContext
*with_context,
OCILobLocator *plaintext2,
sb4 pt_indicator2,
sb4 *ret_indicator
{ FILE *fp;
OCIClobLocator *cipherbb;
ub4 amount;
ocictx oci_ctx;
ocictx *oci_ctxp = &oci_ctx;
status = OCIExtProcGetEnv(with_context,
&oci_ctxp->envhp,
&oci_ctxp->svchp,
&oci_ctxp->errhp);
status = OCIDescriptorAlloc(oci_ctxp->envhp,
(dvoid **) &cipherbb,
(ub4) OCI_DTYPE_LOB,
(size_t) 0,
(dvoid **) 0);
status = (int) OCILobCreateTemporary(oci_ctxp->svchp,
oci_ctxp->errhp, cipherbb,
OCI_DEFAULT,
OCI_DEFAULT,
OCI_TEMP_CLOB, OCI_ATTR_NOCACHE,
OCI_DURATION_SESSION);
amount = 6;
status = OCILobCopy(oci_ctxp->svchp,
oci_ctxp->errhp,
cipherbb,
plaintext2,
amount,
(ub4) 1,
(ub4) 1);
*ret_indicator = OCI_IND_NOTNULL;
OCIDescriptorFree((dvoid *) cipherbb, (ub4) OCI_DTYPE_LOB);
return(cipherbb);

In what database version did you observe the problem?
Thomas

Similar Messages

  • LabView user-event from external dll source

    Hi!
    I'm dealing with the following issue:
    I use a CAN sniffer device, wich sends data over USB to a PC. The main goal is to create a vi that can process the incoming data. I already have a vi wich works with polling mechanism. It calls external DLL functions with the "Call library function node". The main problem is the polling mechanism.
    I would like to recreate this vi so that it would work event-driven. I have an other application, written in C++, that does the same thing, and it gets interrupts from a DLL, when a new data is available in the input buffer.
    The callback mechanism is implemented in the DLL.
    In LabView I would like to do tha same thing. There is the "event case structure", but there is no option for defining such user-events, that i would prefer.
    I have found a similar topic, there the solution is "occurrences". The occurrence is called from a DLL, too. But this solution uses the "waiting for occurrence to set", that is an endless-loop-like thing.
    The other thing I've found is the ActiveX and .NET events. I don't know, probably that is the solution.
    Anyway: is there a possibility to create such events, that can be generated from a simple external DLL and can be handled by "event case structure"? How should I do this?
    Or how NI does this? I mean that NIs DAQ cards must use some similar methods for data processing. Is there some tutorial or support about it?
    Thank you for your answer!

    2716jag wrote:
    Hi Wiebe,         From your answer i have a doubt that What it exactly means "If the dll is used from within LabVIEW". Also i want to know Is there any way to access the functuions defined in the .SYS file in Labview Environment. Regards,Jagan Can you be a litte more specific with your first sentence. I have no good idea what you mean. A .sys driver is usually a kernel device driver. This driver has to be started and run in the kernel subsystem which LabVIEW can not access directly. Such a driver is initialized using the CreateFile() Windows API. The returned handle is then used with other API functions such as ReadFile(), WriteWile(), DeviceIoControl(), and finally CloseHandle().Theoretically you could call all this APIs directly from within LabVIEW using the Call Library Node. In practice you do not want to do this even for fairly simple kernel drivers since the parameters for those APIs do get fairly complex in most cases, and you usually do also want to have some sort of asynchronous operation using events or such to make the driver access user friendly. All these things are most easily handled in a user space DLL written in C that exports a more LabVIEW friendly API that you can then import into LabVIEW using the Call Library Node. Usually most kernel device drivers do come with a accompagning user space DLL already, as this is the only sensible way of accessing such a driver. So you can usually look for the documentation of that user space DLL API and go from there trying to import that into LabVIEW using the Call Library Node. Even then it may not be easy at all if that API uses complicated function parameters and even completely impossible if it uses callbacks or such, requiring you to write a so called wrapper DLL that translates between the native API and a more LabVIEW friendly API.  You don't have to believe me but I can guarantee you that if writing such a user space DLL or wrapper DLL is beyond your capabilities, trying to go directly about accessing the Windows APIs in LabVIEW to access a kernel device driver is going to make you squirm in real pain. And those knowing how to write such a DLL would never even consider spending the time to try to access a kernel device driver directly from LabVIEW. Rolf Kalbermatter

  • Event structure doesn't handle all events from external DLL source

    Hi!
    I use a DLL, wich handles an USB CAN transceiver device, and generates LabVIEW user events with extcode.h and PostLVUserEvent() function.
    In my vi I use an event case structure to handle theese external events. The problem is, that if the events come too frequently, then it cannot handle all events.
    The vi contains a couple of parallel while loops which process the incoming data from the external event.
    In another application I use the same architecture, and that works fine. This one is more complex.
    Do you think I have reached the limits of the program? Or what else can be the problem?
    I have tried to use a queue in the  event structure, it helped a little, but yet, not all the events are handled. My external DLL sends all event, so the problem is not there.
    Thanks in advance!

    Hi Wasz,
    Thanks for the post and I hope your well.
    It is not possible for the event structure to miss events - it simply queues them up. To keep the event structure 'in time' with the code you must ensure the code to execute in each event is minimal to allow the event structure to handle the next event. 
    Please see this two links:
    event structure buffering: leading to,
    How to avoid built-up for "cursor move" events? : where somone is trying to avoid handling all events.
    What sort of events are not being handled? Could it be an issue your events are not configured correctly? Maybe if you could produce a small example in LabVIEW code, so we can just test the event structure configuration... someone working around the external dll call - which you seem sure is working correctly.  
    In terms of queuing to process the events in other loops is certainly an option to speed up the event structure. To do this, use a produce/consumer design pattern.
    hope this helps,
    Kind Regards
    James Hillman
    Applications Engineer 2008 to 2009 National Instruments UK & Ireland
    Loughborough University UK - 2006 to 2011
    Remember Kudos those who help!

  • CVI crashes when calling function from external DLL

    I'm calling a CVI library from Test Stand 4.1.  In that CVI library I load an external DLL (using LoadLibrary) and create a few function pointers (using GetProcAddress).  The DLL loads successfully, and I get addresses for all of the imported functions.  
    However, when I one of the functions is called CVI crashes (Test Stand says it lost the ActiveX connection to CVI) when executing in an external CVI instance.  If executed in the Test Stand process I get a system level exception.
    If I step through the code in CVI, it hangs after trying to step into or over the call to the function pointer from the external DLL.
    I am able to call the functions in a small test project I created in CVI, however when integrating it into an existing test library and calling it through Test Stand it fails.
    Any ideas on how to go about debugging this issue?

    Have you tried calling into the dll that CVI calls directly from TestStand?  I am curious to know if this also crashes.
    I am also curious to know if there are any path references in the dll that is called by the CVI program.  If so are they relative, or absolute paths?
    I ask because one of the possibilities is that relative paths are being used to specify a path from the location of the code that is called, and they are not working because the current working directory is being specified by TestStand, and the paths are not relative to the working directory given by TestStand.
    Jensen
    National Instruments
    Applications Engineer

  • Help, need help booting XP from external hard drive

    Hi all, i can't seem to get XP to boot from my external hard drive.
    OK, heres the story. i have an imac. i use bootcamp to run OSX and XP. things are good. but i run out of space, so i buy myself a 2tb bare drive and swap it out. so i put the original internal with OSX and XP into an external firewire/usb enclosure. I install refit. I hold option on startup and it shows that i have a windows and a mac OS i can boot from the External firewire disk. looks great, but when i choose the windows from the Ext disk, it doesn't boot, instead it loads windows7 on my new 2tb internal disk.
    i hear its hard to boot windows XP from an external disk. my professor told me it has something to do with the boot.ini file on the XP disk... something about changing the value of the "rdisk" to 1, which i have done.
    i am not trying to reinstall xp, rather just boot from it because i have so many applications/plugins that i do not wish to reinstall.
    Does anyone know if this is possible?>> Logon to windows7, and create a system image/backup of the system FROM the XP external disk? and then reinstall XP on that disk, then restore back onto itself? that way i won't have to reinstall.
    anyone have any ideas?

    Hi boi,
    you can't start ANY windows OS from external HD...

  • Action Box config to return data from external transaction

    Hi All,
    My problem is that we need to config the action box on the win client to call an external transaction in R/3, return some data ( room reservation line items ) and then add them as service order line items into the CIC once the user has completed the external transaction.
    We've configured the action box to call a BOR method on R/3 which runs the room reservation program in R/3 and gets the results. I've configured the action box to pass data from the BDD into the R/3 system which works fine (via data flow).
    I have set-up a return parameter in the data flow in the action box config but I'm not sure how to get the data out of the return parameter. I can't find any documentation telling me where the return parameters can be accessed. Are these parameters just dumped into the BDD?
    I know how to create line items in the service order but I don't know where to put my code.
    Please help
    Richard

    Hello Richard,
    do you know SAP Note 322517?
    Regards
    Gregor

  • PLEASE HELP LOCATE SONGS FROM EXTERNAL HD (Cloud)

    First off, I would like to thank ANYONE who can help me out please! I am desperate now for some advice to help me through this, I have spent the last 10 Hours (Not Exaggerating) trying to find a solution to my problem online and reading through countless things I HAVE NOT been able to get an answer to resolve the issue that I am having. Please I beg you to help me! I just wanna call Apple Support so that someone can walk me through this but I am using a Windows and they won't take calls from Windows users (which is kind of lame since I am an Iphone/Ipad/Itunes customer just not on an Apple Computer) and honestly I would even pay money to have this issue fixed already I just don't wanna waste any more time on it!!!
    SO, that being said. Here is the most concise explanation I can give you of my troubles!
    1. I have both a Laptop and a Desktop. My Laptop has been my primary source for Itunes for the passed 8 years, however, it is old and I want to start using my Desktop for Itunes from now on..also, I NEED to free up space on my Laptop so that I can back up my Iphone 5 which has a broken screen, but that's another story!
    2. I Purchased something called a "WD MY CLOUD" Which is basically a personal ICloud that has 2TB of external HD Space on it. I hooked up my WDMyCloud and configured it, got it working perfectly, and I began the multiple hour long process to transfer my ITUNES Folder from my Laptop over to the WDMyCloud.
    3. All of the files and songs were successfully transferred from my Laptop to the WDMyCloud.
    4. I Installed Itunes onto my Desktop.
    5. I shift+clicked Itunes and chose the Itunes Library from my WDMyCloud. I believe the file is found in: \\WDMYCLOUD\Oliver\iTunes\iTunes Library. (And that is the .itl)
    6. When I have Itunes open, I go to preferences, and I change the MEDIA Folder to the iTunes Music Folder located on my WDMyCloud. I believe the file is found as: \\WDMYCLOUD\Oliver\Itunes\iTunes Music. (It does have all of my songs in there on the WDMyCloud in Folders by Album or however itunes had it organized)
    7. Now I am staring at my Itunes Playlists and All of my Songs are there, however, whenever I try to Play ANY Song on there I receive this error: "The song "xx" could not be used because the original file could not be found. Would you like to Locate it?" (And no, I would not like to manually locate over 3,000 songs)
    Also, every single Song has an "!" Exclamation mark next to it.
    8. If I use "Get Info" about the track to see where Itunes is looking for the track, I will show you an example now here to what it says:
    "file://localhost/C:/Users/Oliver/Downloads/Firebeatz - Gangster (Original Mix).mp3"
    (Now I do realize that this is incorrect, it should be looking for the songs in my WDMyCloud, that path above is from my Laptop's Downloads Folder and I have no idea how to fix this.)
    9. I have also tried using the "FindTracks.vbs" on my \\WDMYCLOUD\Oliver\Itunes\iTunes Music Folder and this did nothing, at all.
    10. I have opened the Itunes Library XML that is saved onto my WDMyCloud from my Laptop, and it shows the script as:
    <plist version="1.0"><dict><key>Major Version</key><integer>1</integer><key>Minor Version</key><integer>1</integer><key>Date</key><date>2014-05-24T16:40:35Z</date><key>Application Version</key><string>11.2</string><key>Features</key><integer>5</integer><key>Show Content Ratings</key><true/><key>Music Folder</key><string>file://localhost//WDMYCLOUD/Oliver/Itunes/iTunes%20Music</string><key>Library Persistent ID</key><string>5C3728163E81BB1D</string><key>Tracks</key>
    <p
    ^^ Now I'm not really sure how clumped up that is going to look once I post cuz when I tried copy/pasting it from the XML on to here it came out looking super weird, but as you can see the key thing there is that the file it says it's looking in is the Itunes Music file in my WDMyCloud. So I don't know what could be wrong with the XML script path if there is anything wrong with it at all. The rest of the XML is super super long list of all my tracks and albums an such which is obviously unimportant to this matter. But maybe this can help figure out my problem.
    Anyway, that's about as far as I was able to get after 10 hours of research, and like I said, still no solution. I'm stuck! Please please please help me figure this out! One of the biggest reasons I purchased this WDMyCloud was to use it as a consistent Itunes mediator between my devices and I absolutely MUST free up space on my Laptop ASAP and this is the only way! Thank you so much for your help in advance!!

    See Make a split library portable for some general advice on making a working library portable. It should be less hassle than fixing a broken one.
    Since the library works perfectly on the laptop I would suggest you start over and do it like this;
    1. Create a new iTunes folder in the root of the external as \\WDMYCLOUD\iTunes (capitalised as shown please, just to appease my OCD)
    2. Copy into it the following items from C:\Users\Oliver\Music\iTunes
    Album Artwork
    iTunes Library.itl
    iTunes Library Extras.itdb
    iTunes Library Genius.itdb
    sentinel
    3. Shift-start iTunes and open the library at \\WDMYCLOUD\iTunes\iTunes Library.itl
    4. Under Edit > Preferences > Advanced change the media folder to \\WDMYCLOUD\iTunes\iTunes Media (again capitalised as shown please)
    5. Use File > Library > Organize Library. Tick both boxes, or the one that isn't greyed out, then click OK.
    iTunes will gather in copies of all your media files, putting them into the correct locations so that the library is in the modern layout, and able to be moved from one machine to another.
    I'd recommend you clone the entire iTunes folder to another drive (see this backup tip) before you think about cleaning the originals.
    If your library is large then having the library files on a network share will slow things down as the database has to be written out almost any time you do anything with your library. Once you've connected the library to the new computer and had it opened and working you can copy the library files and Album Artwork folder into the local C:\Users\Oliver\Music\iTunes folder (deleteing what is already there first) then shift-start-iTunes and connect to C:\Users\Oliver\Music\iTunes\iTunes Library.itl. If/when you want to move the library to a different drive/computer copy the files back out to the drive and access the library there at lease once before the move.
    tt2

  • Temp CLOB tablespace not released - Returning CLOB from SP

    I'm trying to call a stored procedure from a .NET application that returns a CLOB as an OUT parameter. The problem that we are experiencing the tablespace allocation from the temporary clob created in the stored procedure is not released after the stored procedure is finished executing. Here is an extract of the code we use to create the CLOB
    DBMS_LOB.createTemporary(TempCLOB, FALSE, DBMS_LOB.CALL);
    XMLDOM.writeToClob(xmlDocumentNode, TempCLOB); --write the xml results to the clob
    Then the TempCLOB is returned to .NET as an OUT parameter. After the procedure is executed the lob locators in v$temporary_lobs rise by one for each execution of the stored procedure. We've tried using DBMS_LOB.freetemporary(TempCLOB) but the CLOB variable is returned to .NET as null.
    Anyone have any ideas of how to properly dispose of the temp CLOB?

    > Anyone have any ideas of how to properly dispose of the temp CLOB?
    Using DBMS_LOB.FreeTemporary() after the temp CLOB has been used..
    Have the .NET client call this PL/SQL API call when it is done with the CLOB. Remember that what is passed to the .NET client is a pointer to the temp CLOB - not the temp CLOB itself. Therefore if you release the CLOB and then pass the pointer to the client, that pointer refers to nothing.
    The client uses this pointer to access bits and pieces of the CLOB (in temp space on the Oracle Server). When the client is done, it is only good manners on the client's part to inform the server that it is done with that server resource and that it can be released.
    Ditto with ref cursors.

  • Help copying files from external drive to another external drive

    I'm trying to backup the files I have on an external drive and this has turned into ****, I feel I'm a Windows user all over again.
    First I tried to encrypt an external drive, just as I've encrypted several others. The solution was to pay for a new OS (10.8.2).
    Now I'm trying to drag/drop the files from the old external drive to the new one (Seagate 3TB) and I get this message:
    "The operation can’t be completed because the selection contains both backup items and non-backup items."
    In a discussion somebody said "Use SuperDuper". I downloaded it but it's an app to make exact backups. I don't want this, I just want to copy files just as I've done in years.
    If someone can help me, I'd like to know:
    1. What does that message mean? The selection was the files in the old drive. Both backup items and non-backup items?????
    2. How can I simply drag and drop the files as I've done all my life?
    * I DON'T WANT A BACKUP APP, I DON'T WANT TO BUY APPS FOR SOMETHING SO SIMPLE AS COPYING FILES, SOMETHING THAT A MAC SHOULD DO.
    Please advice.
    Thank you.

    Hi,
    in PowerShell copy is an alias to the Cmdlet Copy-Item. A parameter "NewOrNewer" does not exit. You have to create your script that meets of your needs.
    Have a look on the CmdLet Copy-Item
    http://technet.microsoft.com/en-us/library/hh849793.aspx    
    I hope that helps you.

  • "Error has occurred in the script" when returning "Home" from external URL

    Hello:
    I've started incorporating video tutorials by our Subject Matter Experts into my Online Help, produced in RoboHelp HTML.
    The first day I tried it, of course it worked, no problem.
    The second day I tried it, it started doing this:
    Pressing either Yes or No on the dialog must be done several times before the dialog goes away, and returns one to the home page in my HTML help. This page is within our website and works fine in any other browser under conventional circumstances. Any ideas?
    Thanks!

    Hey Lew
    One thought here. What if you inserted an inline frame? Are you using RoboHelp 9? If so, click Insert > HTML > IFrame. Configure the Inline Frame with the URL of the topic.
    If you don't have RoboHelp 9, type XXX where you want the frame to be. Then select the XXX and flip over to HTML view. Change the <p> and </P> so they instead read <iframe> and </iframe>. Then return to WYSIWYG view. From there, size the frame as desired and you may then double-click it to see a dialog to change other attributes.
    Might be worth trying if you really want the thing to appear as a topic in the Topic pane.
    Cheers... Rick
    Helpful and Handy Links
    RoboHelp Wish Form/Bug Reporting Form
    Begin learning RoboHelp HTML 7, 8 or 9 within the day!
    Adobe Certified RoboHelp HTML Training
    SorcerStone Blog
    RoboHelp eBooks

  • New mac user, need help transferring music from external hard drive

    I am new to using a mac. I have had an iphone for almost a year so I am catching on quickly to my macbook but this problem has stumped me and all my mac using friends.
    I have a 500gb seagate external hard drive aswell as a new 500gb seagate internal.
    I transferred all my music from an old ipod onto the external hard drive. There is about 50gb of music.
    When I plug my external into my pc desktop I can see the music folder organized into subfolders with files inside that are encoded unless they are opened in itunes. My pc doesn't have enough internal memory to open and store my music library so I have just left it on the hard drive. When I plug the hard drive into my macbook it will show the music folder as having 50gb but when the folder is opened, none of the subfolders or files are visable.
    I went ahead and dragged the folder from my harddrive onto my desktop. It took about an hour to transfer all the files but now the folder is sitting on my desktop and when I open it, it is empty. If i look in the folders info, it says it has the 50gb. If i try to drag and drop it into itunes nothing happens. If I drag and drop it into the itunes music folder, it will go there but will not show up on itunes.
    I'm stumped and no longer eligable for apples telephone support as I bought this macbook from a friend. Any help would be greatly appreciated

    I have a couple of theories, but I'm not an iTunes expert. These people are, though:
    http://discussions.apple.com/forum.jspa?forumID=782
    Try posting your question there. Good luck!

  • Need help on import from external drive!

    I just imported several thousand pictures from an external drive into iphoto 08--unfortunately all photos are listed as one big event--I am now a little confused as to what to do next---I would like them to be imported in the original files (years) if possible...thanks for the help!

    In iPhoto preferences (iPhoto menu ==> Preferences ==> events) under AutoSplit events you need to check "Imported items from finder" before you import
    Probably the best thing to do *IF THE ONLY THING IN YOUR LIBRARY* is this import is to trash the iPhoto Library from your pictures folder, verify your preference settings and reimport
    LN
    Message was edited by: LarryHN

  • Help on inporting from external drive

    when I drag my imovie files to idvd from the external drive, it does not take,
    I see my options as
    1. make them into quicktime movies and then drag them
    2. install idvd to my external drive.
    Any thoughts, thanks

    Can you open iDVD and select the imovie from the external (instead of dragging)? Why not convert it to QT (Full Quality DV)?
    I would not recommend installing it on your external.
    Sue

  • Help installing leopard from external fw dvd

    I'm trying to install Leopard on an iMacCore Duo with a broken dvd drive. The hdd has been wiped clean. I've got an external LaCie fw dvd drive hooked up to the iMac. No matter what i do the iMac still gives me the folder with the ?. Holding down the option or C key with the Leopard dvd in the external drive makes no difference. It won't load the dvd. I've also tried using the dvds that came with the iMac. No luck. Not sure how to put OSX on this iMac.
    thx
    lenn

    Have you tried using your installer disc on another Mac just to be sure there isn't a problem with the DVD? I would also contact LaCie tech support. I would be surprised if the device was not bootable. Do you know if the drive is even working? That is are you able to mount the DVD on the Desktop (assuming you can get to the Desktop.)
    You should be able to boot the computer from an external FW hard drive if you have a bootable system on the drive that's compatible with your iMac. You also may be able to install OS X on the iMac from another Mac with a FireWire port by using Target Disk Mode.
    BTW, you aren't trying to use the Leopard installer discs that came with your MBP to install Leopard on your iMac, are you? If so that won't work. The MB{P's discs are machine specific and will not likely boot the older iMac.

  • Returning pics from external editor?

    I am using elements 12 as an external editor and cannot seem to get the edited pic back in aperature.
    I have seen it work for others but I must be missing a setting>
    Help?

    What are your settings for the external editor? You need to point the external editor to the Elements application, not the folder containing the application.
    Point the editor to:
    Applications>Adobe Photoshop Elements 12>Support Files>Adobe Photoshop Elements Editor
    And in Elements use "Save" not "Save as".

Maybe you are looking for